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

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

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
👩‍💻 Замыкания в Python — функции с памятью

Замыкание (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() в Python и когда его применять?

Метод remove() удаляет первое вхождение указанного элемента из списка. Это удобно, когда нужно убрать конкретное значение, а не по индексу.

Пример:

fruits = ["apple", "banana", "orange", "banana"]

fruits.remove("banana")
print(fruits)
# ➜ ['apple', 'orange', 'banana']


📌В этом примере remove() удаляет только первое появление "banana", оставляя второе

remove() удобно использовать при очистке данных, фильтрации списков или удалении обработанных элементов. Если элемента нет, Python вызывает ValueError, поэтому перед удалением лучше проверять наличие через in
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
👩‍💻 Что такое свойство line-height в CSS и зачем оно нужно?

Свойство 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
Что выведет код?
👩‍💻 Дескрипторы в Python — сердце свойств и ORM

Дескрипторы — это объекты, которые управляют доступом к атрибутам других классов через методы __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
Что выведет код?
👩‍💻 Контекстные менеджеры — управление ресурсами без утечек

Контекстные менеджеры позволяют автоматически управлять ресурсами — открытыми файлами, соединениями, блокировками.

Они гарантируют освобождение ресурсов даже при ошибках


➡️ Пример:

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