Please open Telegram to view this post
VIEW IN TELEGRAM
pip
для установки пакетов, virtualenv
для создания изолированных окружений и requirements.txt
для фиксации списка зависимостей. Также популярны pipenv
и poetry
, которые объединяют управление зависимостями и виртуальными окружениями.
# requirements.txt
flask==2.0.1
requests>=2.26.0
pipenv
и poetry
используют файлы Pipfile
и pyproject.toml
соответственно, что упрощает управление зависимостями и их версиями.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
Например, паттерн Singleton гарантирует, что класс имеет только один экземпляр. Это полезно для управления общими ресурсами, такими как подключения к базе данных.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
range()
генерирует последовательность чисел, которая часто используется в циклах for
для итерации. Она может принимать один, два или три аргумента: старт, стоп и шаг.
for i in range(5):
print(i) # Выведет числа от 0 до 4
Если указаны два аргумента, например,
range(2, 6)
, цикл начнётся с 2 и закончится на 5. Третий аргумент задаёт шаг: range(1, 10, 2)
выведет нечётные числа от 1 до 9.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
[]
. Элементы могут быть любого типа и разделяются запятыми. Для добавления элемента в список используется метод append()
.
my_list = [1, 2, 3]
my_list.append(4) # Добавляет 4 в конец списка
Также можно использовать метод
insert()
для добавления элемента на определённую позицию. Например, my_list.insert(1, 10)
добавит число 10 на вторую позицию.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
return
, и они будут автоматически упакованы в кортеж.
def get_values():
return 1, 2, 3
result = get_values() # Возвращает кортеж (1, 2, 3)
Также можно явно указать возвращаемые структуры, например, список или словарь, в зависимости от задачи.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
except
или перечислить исключения в одном блоке через кортеж. Это позволяет обрабатывать разные ошибки по отдельности или совместно.
try:
result = 10 / 0
except (ZeroDivisionError, TypeError) as e:
print(f"Произошла ошибка: {e}")
В данном примере перехватываются как деление на ноль, так и ошибка типа данных. Оба исключения обрабатываются в одном блоке.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
__init__
.
class MyClass:
class_attr = "Class Attribute" # Атрибут класса
def __init__(self):
self.instance_attr = "Instance Attribute" # Атрибут объекта
Атрибуты класса общие для всех экземпляров, а атрибуты объекта уникальны для каждого экземпляра.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
type()
возвращает тип переданного объекта. Она может использоваться для проверки типа данных или для динамического создания новых типов.
x = 42
print(type(x)) # Выведет <class 'int'>
Если передать три аргумента,
type()
создаёт новый тип: имя, базовые классы и словарь атрибутов. Например, MyClass = type('MyClass', (object,), {'attr': 42})
создаёт новый класс.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
async
перед определением функции. Запуск асинхронной задачи выполняется с помощью await
внутри другой асинхронной функции или через asyncio.run()
.
import asyncio
async def my_task():
print("Задача выполняется")
await asyncio.sleep(1)
asyncio.run(my_task())
Функция
asyncio.run()
запускает асинхронную задачу и управляет циклом событий.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
а
тор присваивания = связывает имя переменной с объектом в памяти. При присваивании создается ссылка на объект, а не копия.
a = 10 # переменная a ссылается на целое число 10
b = a # b ссылается на тот же объект, что и a
Если изменяемый объект модифицируется через одну переменную, это отразится на другой:
lst1 = [1, 2]
lst2 = lst1
lst1.append(3) # изменение через lst1
print(lst2) # [1, 2, 3], так как lst2 ссылается на тот же список
Для изменяемых типов иногда требуется создание копии, чтобы избежать неожиданных изменений.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
zip()
объединяет элементы нескольких итерируемых объектов попарно, создавая итератор кортежей. Работает до исчерпания самой короткой коллекции.
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30]
for name, age in zip(names, ages):
print(name, age)
Результат:
Alice 25
Bob 30
Для обработки всех элементов, включая непарные, можно использовать
zip_longest
из модуля itertools
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
try-except
позволяет перехватывать и обрабатывать ошибки ввода-вывода, такие как FileNotFoundError
или PermissionError
.
try:
with open('file.txt', 'r') as file:
data = file.read()
except FileNotFoundError:
print("Файл не найден")
except IOError:
print("Ошибка чтения файла")
Блок
try
выполняет потенциально опасный код, а except
ловит конкретные исключения. Можно обрабатывать несколько типов ошибок или использовать общий except IOError
для всех операций ввода-вывода.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
def log_generator(func):
def wrapper(*args, **kwargs):
print("Generator started")
gen = func(*args, **kwargs)
for value in gen:
print(f"Yielded: {value}")
yield value
return wrapper
@log_generator
def count_to(n):
for i in range(n):
yield i
Декоратор
log_generator
перехватывает вызов генератора, логирует его запуск и каждое yielded значение. Важно, чтобы обёртка сама возвращала генератор, иначе потеряется ленивое выполнение.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
{}
или функции set()
. Элементы должны быть уникальными и неизменяемыми.
unique_numbers = {1, 2, 3} # Литерал множества
empty_set = set() # Пустое множество (не {} — это словарь)
Для преобразования списка или строки во множество используется
set()
, автоматически удаляющий дубликаты.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM