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

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

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

Дескриптор — это объект, который управляет доступом к атрибутам класса через методы get, set и delete. Они позволяют гибко контролировать поведение атрибутов.

Пример:

class Descriptor:
def init(self, value=None):
self.value = value

def get(self, instance, owner):
print("Getting value")
return self.value

def set(self, instance, value):
print("Setting value")
self.value = value

class MyClass:
attr = Descriptor()

obj = MyClass()
obj.attr = 42 # Setting value
print(obj.attr) # Getting value → 42


Дескрипторы используются в свойствах (property), ORM, логировании доступа и валидации данных. Они помогают гибко управлять состоянием объектов и позволяют писать более чистый код.
⚡️ Как работает super() в Python?

super() позволяет вызывать методы родительского класса, обеспечивая правильное наследование и расширение функционала.

Пример:

class Parent:
def greet(self):
return "Hello from Parent"

class Child(Parent):
def greet(self):
return super().greet() + " and Child"

obj = Child()
print(obj.greet()) # "Hello from Parent and Child"


super() особенно полезен при множественном наследовании, так как помогает вызывать методы родительских классов без явного указания их имен.
Что выведет код?
Anonymous Poll
39%
()
17%
[]
20%
[1, 2, 3]
24%
Ошибку
Зачем нужно ключевое слово yield в Python?

yield используется для создания генераторов, которые возвращают данные по мере запроса, вместо хранения всего результата в памяти.

Пример:
def count_up_to(n):
count = 1
while count <= n:
yield count # Возвращает значение и приостанавливает выполнение
count += 1

for num in count_up_to(5):
print(num)


yield позволяет приостанавливать и возобновлять выполнение функции, экономя память и упрощая работу с потоками данных.
Что делает getattr() в Python и когда его использовать?

Функция getattr() позволяет динамически получать атрибут объекта по его имени в виде строки. Это удобно, когда атрибут неизвестен заранее.

Пример:

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

p = Person("Alice", 30)
print(getattr(p, "name")) # Alice


📌 Если атрибута нет, можно передать значение по умолчанию, чтобы избежать ошибки:

print(getattr(p, "city", "Не указано"))  # Не указано


getattr() полезен, когда нужно работать с атрибутами гибко, например, при обработке конфигураций, JSON-данных или динамических объектов.
🔍 Как работает slots в Python и зачем его использовать?

slots — это механизм, который ограничивает атрибуты объекта и уменьшает потребление памяти, исключая хранение dict.

Пример:

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

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

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


Использование slots делает объекты легче и быстрее, так как Python не создаёт динамический словарь для атрибутов. Это особенно полезно при работе с большим количеством объектов.
🔥 Mutable vs Immutable в Python

В Python все данные — это объекты, и они делятся на изменяемые (mutable) и неизменяемые (immutable).

🔹 Неизменяемые (immutable): нельзя изменить после создания
int, float, str, tuple, frozenset
x = "hello"
x += " world" # Создается новый объект, а не изменяется старый


🔹 Изменяемые (mutable): можно изменять без создания нового объекта
list, dict, set, bytearray
lst = [1, 2, 3]
lst.append(4) # Список изменяется в той же области памяти


⚠️ Важный нюанс

Передача изменяемых объектов в функцию может привести к неожиданным изменениям:

def modify_list(lst):
lst.append(99) # Изменяет оригинальный список!

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]


Вывод:

Используйте tuple, если данные не должны изменяться.
Будьте осторожны с изменяемыми объектами при передаче в функции.
Если нужно копирование, используйте .copy() или deepcopy().
Что выведет код?
Anonymous Quiz
12%
2
40%
4
14%
5
35%
Ошибку
🔥 lambda — короткие функции в Python

lambda — это анонимная функция, которая записывается в одну строку и не требует def. Используется там, где нужна простая операция без имени функции.

Пример (обычная функция vs. lambda):

def square(x):
return x ** 2

square_lambda = lambda x: x ** 2

print(square(5)) # 25
print(square_lambda(5)) # 25


🔹 Где используется?

1️⃣ map() — Применение функции к списку
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, nums))
print(squared) # [1, 4, 9, 16]


2️⃣ filter() — Фильтрация данных
even = list(filter(lambda x: x % 2 == 0, nums))
print(even) # [2, 4]


3️⃣ sorted() — Сортировка по ключу
pairs = [(1, 'one'), (3, 'three'), (2, 'two')]
pairs.sort(key=lambda x: x[0])
print(pairs) # [(1, 'one'), (2, 'two'), (3, 'three')]


⚡️ Когда использовать lambda?

Когда функция простая и короткая
Когда она нужна один раз

Не стоит использовать lambda, если логика сложная – лучше писать def.
Что выведет код сверху?
Anonymous Quiz
2%
[]
92%
[1]
2%
None
4%
Ошибка