В Python
dataclasses можно сделать неизменяемыми с помощью параметра frozen=True.Это превращает экземпляры в безопасные структуры данных, похожие на namedtuple, но с гибкостью классов.
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
p = Point(3, 5)
# p.x = 10 # ❌ Ошибка: объект заморожен
print(p) # Point(x=3, y=5)
📌 Используй frozen dataclass, если данные должны быть константными и безопасными по дизайну
Please open Telegram to view this post
VIEW IN TELEGRAM
Дескрипторы — это объекты, которые управляют доступом к атрибутам других классов через методы
__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-свойств.
Please open Telegram to view this post
VIEW IN TELEGRAM
Генераторы в 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 превращает функцию в генератор, который "запоминает" состояние между вызовами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
29%
calc, 10, 99, 10
14%
10, 99, 10
29%
calc, 10, calc, 99
29%
calc, 10, 99, calc, 10
Контекстные менеджеры позволяют автоматически управлять ресурсами — открытыми файлами, соединениями, блокировками.
Они гарантируют освобождение ресурсов даже при ошибках
class Managed:
def __enter__(self):
print("Ресурс открыт")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Ресурс закрыт")
with Managed():
print("Работаем с ресурсом")
# Ресурс открыт
# Работаем с ресурсом
# Ресурс закрыт
📌 Метод __enter__ выполняется при входе в блок, __exit__ — при выходе, даже если возникло исключение.
Please open Telegram to view this post
VIEW IN TELEGRAM
split() в Python и когда его применять?Метод
split() разбивает строку на части по заданному разделителю и возвращает список. Это удобно для обработки текста, логов, CSV-данных и пользовательского ввода.text = "apple,banana,orange"
fruits = text.split(",")
print(fruits)
# ➜ ['apple', 'banana', 'orange']
split() удобно использовать при парсинге строк, чтении файлов, анализе данных и обработке команд. Без аргумента метод автоматически разделяет по пробелам — это особенно полезно для очистки и разбиения текста на слова
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
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)