🐍 Укус питона 🐍
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