🐍 Укус питона 🐍
2.57K subscribers
1.01K photos
23 videos
285 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
🔥 Что такое slots в Python и зачем он нужен?

slots ограничивает список атрибутов у экземпляров класса, экономя память за счет отказа от dict.

Обычный класс без slots:
class Person:
def init(self, name, age):
self.name = name
self.age = age

p = Person("Alice", 25)
p.city = "New York" # Можно добавить новый атрибут


Класс с slots:
class Person:
slots = ("name", "age") # Разрешены только эти атрибуты

def init(self, name, age):
self.name = name
self.age = age

p = Person("Alice", 25)
p.city = "New York" # AttributeError: 'Person' object has no attribute 'city'


Плюсы slots

Экономит память (не создается dict)
Ускоряет доступ к атрибутам
Предотвращает создание лишних атрибутов

⚡️ Используйте slots, если нужно много однотипных объектов и важна производительность!
Так и работаем
😁1
🐍 Что делает enumerate() в Python?

enumerate() добавляет индекс при итерации по списку.

Пример:
fruits = ["🍎", "🍌", "🍇"]
for i, fruit in enumerate(fruits, start=1):
print(i, fruit)

1 🍎
2 🍌
3 🍇


Зачем нужно?

Упрощает работу с индексами в циклах
Делает код читаемым без range(len())

Используйте enumerate() вместо range(len()) для чистого и Pythonic-кода!
Так и работаем
🐳3🥴21🔥1
⚙️ Сборщик мусора в Python: как он работает?

В Python управление памятью происходит автоматически с помощью сборщика мусора (Garbage Collector, GC). Он следит за объектами, которые больше не используются, и освобождает занимаемую ими память.

🔹 Подсчет ссылок

Каждый объект хранит количество ссылок на себя. Когда это число становится нулем, объект автоматически удаляется. Однако если два объекта ссылаются друг на друга, но больше нигде не используются, Python не сможет их удалить.

🔹 Алгоритм поколений

Чтобы эффективно управлять памятью, Python разделяет объекты на три группы:

Gen 0 — новые объекты, проверяются чаще всего.
Gen 1 — пережившие одну проверку, удаляются реже.
Gen 2 — долгоживущие объекты, проверяются редко.

Новые объекты проверяются чаще, а старые — реже, что ускоряет работу сборщика мусора.

🔹 Управление GC

Python справляется сам, но можно управлять GC вручную:

gc.collect() — запустить сборку мусора вручную.
gc.disable() — отключить GC (не рекомендуется).

GC в Python делает управление памятью удобным, но понимание его работы помогает писать более эффективный код и избегать утечек памяти.
LLM-модули: как маленькая модель учится у большой

Как передавать знания от большой LLM в маленькую без файн-тюнинга? Разбираем метод через кросс-внимание и LLM-модули, который позволяет обучать модели для узких задач без больших затрат.
😢1🥴1🐳1
Как работает getitem в Python?

Метод getitem позволяет обращаться к объектам класса по индексу или ключу, как к спискам или словарям.

Пример:

class CustomList:
def init(self, data):
self.data = data

def getitem(self, index):
return self.data[index] # Позволяет использовать obj[index]

nums = CustomList([10, 20, 30])
print(nums[1]) # 20


🔹 Зачем нужно?

• Позволяет настроить доступ к элементам объекта.
• Делает объекты итерируемыми (например, в for-циклах).
• Помогает создавать свои структуры данных, работающие как списки или словари.

⚡️ getitem делает объекты гибкими и удобными в использовании, улучшая читаемость кода!
🏗 Как работает call в Python?

Метод call позволяет вызывать экземпляр класса как функцию. Если этот метод определён в классе, объект можно использовать как obj().

Пример:

class Multiplier:
def init(self, factor):
self.factor = factor

def call(self, value):
return value * self.factor

double = Multiplier(2)
print(double(5)) # 10


🔹 Зачем нужно?

• Позволяет создавать объекты-функции.
• Удобно для конфигурируемых вычислений (например, замыканий).
• Улучшает читаемость, убирая лишние .method() вызовы.

⚡️ Используйте call, если хотите, чтобы объект вёл себя как функция!
⚡️ Как работает @staticmethod в Python?

Декоратор @staticmethod превращает метод класса в обычную функцию внутри класса, которая не получает ссылку на экземпляр (self) или класс (cls).

Пример:

class MathUtils:
@staticmethod
def add(x, y):
return x + y

print(MathUtils.add(3, 5)) # 8


🔹 Зачем нужен?

• Используется, когда метод не зависит от состояния экземпляра или класса.
• Делает код логичнее, если метод просто выполняет действие, связанное с классом.
• Упрощает структуру, так как не требует создания объекта для вызова.

⚡️ Используйте @staticmethod, если метод не работает с self или cls, но логически относится к классу!
🏷 Что такое functools.lru_cache и зачем он нужен?

functools.lru_cache — это декоратор для автоматического кэширования результатов функций. Он ускоряет выполнение, избегая повторных вычислений.

Пример:

from functools import lru_cache

@lru_cache(maxsize=100) # Кэшируем до 100 результатов
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

print(fib(10)) # 55 (значительно быстрее благодаря кэшу)


🔹 Зачем использовать?


• Ускоряет повторяющиеся вычисления.
• Уменьшает нагрузку на процессор при рекурсивных вызовах.
• Экономит память благодаря ограничению maxsize.

⚡️ lru_cache особенно полезен для функций с повторяющимися входными данными!
Как работает itertools.cycle в Python?

itertools.cycle создаёт бесконечный итератор, который зацикливает последовательность, перезапуская её с начала после завершения.

Пример:

from itertools import cycle

colors = ["red", "green", "blue"]
color_cycle = cycle(colors)

for _ in range(5):
print(next(color_cycle)) # red → green → blue → red → green


🔹 Зачем использовать?

• Повторение элементов списка без переписывания вручную.
• Автоматическое зацикливание без индексов.
• Полезно в анимациях, смене тем, бесконечных процессах.

itertools.cycle — мощный инструмент для циклических операций без лишнего кода.