Замыкание (closure) — это функция, которая «запоминает» значения переменных из области видимости, где она была создана, даже если эта область уже недоступна.
Это мощный инструмент для инкапсуляции состояния без классов
def counter(start=0):
count = start
def increment():
nonlocal count
count += 1
return count
return increment
click = counter(10)
print(click()) # 11
print(click()) # 12
📌 Функция increment хранит доступ к переменной count, даже после выхода из counter
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод
remove()
удаляет первое вхождение указанного элемента из списка. Это удобно, когда нужно убрать конкретное значение, а не по индексу.fruits = ["apple", "banana", "orange", "banana"]
fruits.remove("banana")
print(fruits)
# ➜ ['apple', 'orange', 'banana']
remove() удобно использовать при очистке данных, фильтрации списков или удалении обработанных элементов. Если элемента нет, Python вызывает ValueError, поэтому перед удалением лучше проверять наличие через in
Please open Telegram to view this post
VIEW IN TELEGRAM
Свойство
line-height
управляет расстоянием между строками текста.Это влияет не только на читаемость, но и на вертикальный ритм всего интерфейса
<p class="text">
Это пример текста с увеличенным межстрочным интервалом.
</p>
<style>
.text {
font-size: 16px;
line-height: 1.8;
}
</style>
📌 В этом примере строки располагаются свободнее, благодаря line-height: 1.8
Please open Telegram to view this post
VIEW IN TELEGRAM
В 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