ch
Feedback
🐍 Укус питона 🐍

🐍 Укус питона 🐍

前往频道在 Telegram

🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки. 👽 Админ - @tg_adminisrator 🔊 Купить рекламу: https://telega.in/c/byteofpython 👉 Чат: @abyteofpython 👉 Поделиться с друзьями: @byteofpython

显示更多
2 334
订阅者
无数据24 小时
-117
-3730
帖子存档
👩‍💻 Корутины — асинхронность без потоков Корутины в Python — это функции, которые приостанавливают выполнение с помощью await, освобождая поток для других задач.
Это ядро asyncio, позволяющее писать конкурентный код без блокировок
➡️ Пример:
import asyncio

async def download(name, delay):
    print(f"Начинаю {name}")
    await asyncio.sleep(delay)
    print(f"{name} готов")

async def main():
    await asyncio.gather(
        download("Файл 1", 2),
        download("Файл 2", 1)
    )

asyncio.run(main())
📌 Здесь оба «скачивания» выполняются параллельно, хотя используется всего один поток.

👩‍💻 Слотирование классов — экономия памяти и ускорение Python-объектов По умолчанию каждый объект в Python хранит свои атрибуты в __dict__, что гибко, но затратно по памяти.
С помощью __slots__ можно задать фиксированный набор атрибутов — без словаря
➡️ Пример:
class User:
    __slots__ = ("name", "age")
    def __init__(self, name, age):
        self.name = name
        self.age = age

u = User("Анна", 25)
u.city = "Москва"  # ❌ AttributeError
📌 __slots__ экономит память (до 30–40%) и ускоряет доступ к атрибутам.

Ответ:
Anonymous voting

Что выведет код?
def f():
    xs = []
    for x in range(3):
        xs.append(lambda: x)
    ys = [(lambda: y) for y in range(3)]
    return [fn() for fn in xs], [fn() for fn in ys], x

print(f())

👩‍💻 Метаклассы — классы для создания классов Метаклассы в Python определяют, как создаются и ведут себя классы.
Они дают контроль над структурой, проверкой и автоматизацией при объявлении новых классов
➡️ Пример:
class Validator(type):
    def __new__(cls, name, bases, attrs):
        if "validate" not in attrs:
            raise TypeError("Класс должен содержать метод validate()")
        return super().__new__(cls, name, bases, attrs)


class User(metaclass=Validator):
    def validate(self):
        return True


# class BrokenUser(metaclass=Validator):  # ❌ Ошибка — нет метода validate()
📌 Здесь Validator проверяет, что каждый класс обязан иметь метод validate.

👩‍💻 Декоратор @property — чистый интерфейс без скобок @property позволяет превратить методы класса в атрибуты, сохранив при этом логику вычислений или валидации.
Это делает интерфейс класса чистым и безопасным, без лишних вызовов и скобок.
➡️ Пример:
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    @property
    def area(self):
        return self.width * self.height

r = Rectangle(5, 10)
print(r.area)  # 50, а не r.area()
📌
Здесь area выглядит как атрибут, но фактически вычисляется при обращении.

Ответ
Anonymous voting

Что выведет код?
from contextlib import ExitStack, contextmanager

@contextmanager
def cm(name):
    print("e"+name)
    try:
        yield name
    finally:
        print("x"+name)

with ExitStack() as st:
    a = st.enter_context(cm("A"))
    b = st.enter_context(cm("B"))
    print("body", a, b)

Зачем используется метод split() в Python и когда его применять? Метод split() разбивает строку на части по заданному разделителю и возвращает список. Это удобно для обработки текста, логов, CSV-данных и пользовательского ввода. Пример:
text = "apple,banana,orange"
fruits = text.split(",")
print(fruits)
# ➜ ['apple', 'banana', 'orange']
📌В этом примере split() разделяет строку по запятой, превращая её в список слов
split() удобно использовать при парсинге строк, чтении файлов, анализе данных и обработке команд. Без аргумента метод автоматически разделяет по пробелам — это особенно полезно для очистки и разбиения текста на слова

👩‍💻 Контекстные менеджеры — управление ресурсами без утечек Контекстные менеджеры позволяют автоматически управлять ресурсами — открытыми файлами, соединениями, блокировками.
Они гарантируют освобождение ресурсов даже при ошибках
➡️ Пример:
class Managed:
    def __enter__(self):
        print("Ресурс открыт")
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Ресурс закрыт")

with Managed():
    print("Работаем с ресурсом")

# Ресурс открыт
# Работаем с ресурсом
# Ресурс закрыт
📌 Метод __enter__ выполняется при входе в блок, __exit__ — при выходе, даже если возникло исключение.

Ответ:
Anonymous voting

Что выведет код?
Что выведет код?

👩‍💻 Генераторы — ленивые последовательности без лишней памяти Генераторы в Python создают значения "на лету", без хранения всего списка в памяти.
Это делает их идеальными для работы с большими объёмами данных и потоками
➡️ Пример:
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

gen = fibonacci()
for _ in range(5):
    print(next(gen))
# 0 1 1 2 3
📌 Здесь yield превращает функцию в генератор, который "запоминает" состояние между вызовами.

👩‍💻 Дескрипторы в Python — сердце свойств и ORM Дескрипторы — это объекты, которые управляют доступом к атрибутам других классов через методы __get__, __set__ и __delete__.
Они лежат в основе property, @staticmethod, @classmethod и ORM вроде Django.
➡️ Пример:
class Celsius:
    def __get__(self, instance, owner):
        return instance._temp

    def __set__(self, instance, value):
        if value < -273.15:
            raise ValueError("Температура ниже абсолютного нуля!")
        instance._temp = value


class Temperature:
    temp = Celsius()


t = Temperature()
t.temp = 25
print(t.temp)  # 25
📌 Дескрипторы — это низкоуровневая магия, на которой построен весь механизм Python-свойств.

Ответ:
Anonymous voting

Что выведет код?
Что выведет код?