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

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

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
🔥 *args и **kwargs в Python

🔹 *args — передает позиционные аргументы как кортеж:
def add_numbers(*args):
return sum(args)

print(add_numbers(1, 2, 3)) # 6


🔹 **kwargs — передает именованные аргументы как словарь:
def greet(**kwargs):
print(kwargs)

greet(name="Alice", age=25) # {'name': 'Alice', 'age': 25}


Используйте *args для списка значений и **kwargs для гибких параметров!
↔️ Разница между is и == в Python

🔹 == (равенство) проверяет, равны ли значения объектов:
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значения одинаковые)


🔹 is (идентичность) проверяет, указывают ли переменные на один и тот же объект в памяти:
print(a is b)  # False (разные объекты)


🔹 Но для immutable-объектов (например, int, str, tuple) Python кеширует значения:
x = 256
y = 256
print(x is y) # True (указывают на один объект)


Используйте == для сравнения значений и is для проверки, ссылаются ли переменные на один объект в памяти!
Немножко о реализации set в Python

Почему set в Python не всегда такой хаотичный, как кажется? Разбираемся, как множества устроены под капотом, как работают хэш-таблицы и почему порядок элементов иногда оказывается предсказуемым.
Что делает @property в Python?

@property превращает метод класса в свойство, позволяя обращаться к нему без скобок.

Пример:
class Person:
def init(self, name):
self._name = name

@property
def name(self):
return self._name

p = Person("Alice")
print(p.name) # Alice (как атрибут, но с логикой)


Зачем нужно?

Позволяет использовать методы как атрибуты
Защищает данные от прямого изменения
Позволяет добавить логику без изменения интерфейса

⚡️ @property делает код чище и безопаснее, улучшая инкапсуляцию!
👍1
🔥 Что такое 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 делает управление памятью удобным, но понимание его работы помогает писать более эффективный код и избегать утечек памяти.