🐍 Укус питона 🐍

🐍 Укус питона 🐍

@byteofpython

🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.👽 Админ - @tg_adminisrator🔊 Купить рекламу: https://telega.in/c/byteofpython👉 Чат: @abyteofpython👉 Поделиться с друзьями: @byteofpython

2 252подписчиков
mixed

Похожие каналы

Все →

Последние посты

🐍 Укус питона 🐍 — пост в ТГ канале

Массивы в pattern matching.В качестве шаблонов также могут выступать массивы. Подобным шаблоны также могут содержать либо конкретные значения, либо переменные, которые передаются элементы массивов, либо символ прочерка _, если элемент массива не важен.В данном случае функция print_people принимает массив, который, как предполагается, состоит из трех элементов, рассмотрим их в следующей части.🐍 Укус питона // 💬 Чат // #теория #pattern_matching #массивы

18 дек. 2025 г.612В Telegram

👩‍💻 Динамическое создание классов — метапрограммирование в чистом видеВ Python классы — это тоже объекты, и их можно создавать "на лету" с помощью функции type(). Это открывает путь к динамическому API, автоматическим моделям и DSL.➡️ Пример:def make_model(name, **fields): return type(name, (object,), fields)User = make_model("User", name="Анна", age=25)print(User.name) # Аннаadmin = User()admin.role = "admin"print(admin.role) # admin📌 Здесь type() создаёт новый класс User прямо во время исполнения.

7 нояб. 2025 г.607В Telegram

Что выведет код?x = 0def outer(): x = 1 def inner(): nonlocal x x += 1 return x print("A", inner(), x) x = 5 print("B", inner(), x)outer()print("G", x)

7 нояб. 2025 г.379В Telegram

👩‍💻 Контракты через аннотации — не просто подсказки типовАннотации типов (type hints) — это не только помощь IDE.С их помощью можно внедрять контроль логики исполнения — проверять типы, значения и инварианты прямо во время работы программы.➡️ Пример:from typing import get_type_hintsdef enforce_types(func): hints = get_type_hints(func) def wrapper(*args, **kwargs): for name, arg in zip(hints, args): if not isinstance(arg, hints[name]): raise TypeError(f"{name} должен быть {hints[name].__name__}") return func(*args, **kwargs) return wrapper@enforce_typesdef greet(name: str, age: int): print(f"{name}, {age}")greet("Анна", 25) # ✅greet("Анна", "25") # ❌ TypeError📌 Здесь аннотации становятся частью исполняемого контракта, а не просто документацией.

6 нояб. 2025 г.314В Telegram

👩‍💻 WeakRef — как избежать утечек памяти в PythonИногда объект больше не нужен, но на него всё ещё ссылаются другие части программы. Обычная ссылка удерживает объект в памяти, а слабая ссылка (weak reference) — нет.Она не мешает сборщику мусора удалить объект, если больше нет сильных ссылок➡️ Пример:import weakrefclass Data: def __init__(self, name): self.name = name def __del__(self): print(f"{self.name} удалён")obj = Data("Test")ref = weakref.ref(obj)print(ref()) # <__main__.Data object at ...>del objprint(ref()) # None — объект собран GC📌 weakref.ref() создаёт слабую ссылку: объект может быть удалён, даже если ссылка ещё существует.

5 нояб. 2025 г.250В Telegram

Что выведет код?import itertoolslst = [[1, 2], [3]]it = itertools.chain.from_iterable(lst)print(next(it))lst.append([4, 5])print(list(it))

5 нояб. 2025 г.230В Telegram

👩‍💻 Протокол дескрипторов — скрытый механизм свойств и ORMВ Python за @property, staticmethod, classmethod и даже ORM-поля стоит единый механизм — дескрипторы.Это объекты, которые управляют доступом к атрибутам через методы __get__, __set__, __delete__➡️ Пример:class LoggedAttribute: def __init__(self, name): self.name = name def __get__(self, instance, owner): value = instance.__dict__.get(self.name) print(f"Получено {self.name} = {value}") return value def __set__(self, instance, value): print(f"Изменено {self.name} = {value}") instance.__dict__[self.name] = valueclass User: age = LoggedAttribute("age")u = User()u.age = 30print(u.age)📌 При обращении к u.age срабатывают методы дескриптора, а не прямой доступ к атрибуту.

4 нояб. 2025 г.202В Telegram

👩‍💻 Протокол итерации — как работает цикл for под капотомВ Python любой объект можно сделать итерируемым, если он реализует протокол итерации — методы __iter__() и __next__().Это основа работы for, генераторов, списковых включений и даже файлов➡️ Пример:class Counter: def __init__(self, limit): self.limit = limit self.value = 0 def __iter__(self): return self def __next__(self): if self.value < self.limit: self.value += 1 return self.value raise StopIterationfor i in Counter(3): print(i)# 1 2 3📌 Цикл for просто вызывает next() до тех пор, пока не появится StopIteration.

3 нояб. 2025 г.217В Telegram

Что выведет код?class A: def __eq__(self, o): return isinstance(o, A)class B: def __eq__(self, o): return isinstance(o, B) __hash__ = object.__hash__s = set()try: s.add(A())except TypeError: print("A")b = B()s.add(b)print("B", b in s)

3 нояб. 2025 г.236В Telegram

❓ Зачем используется метод replace() в Python и когда его применять?Метод replace() возвращает новую строку, в которой все вхождения указанной подстроки заменены на другую. Это удобный способ быстро изменить текст без сложных регулярных выражений.✅Пример:text = "Python is hard, but Python is fun!"new_text = text.replace("Python", "Coding")print(new_text)# ➜ Coding is hard, but Coding is fun!📌В этом примере replace() заменяет все вхождения слова "Python" на "Coding"replace() удобно использовать при очистке данных, форматировании строк, замене символов и шаблонов в текстах. Метод не изменяет исходную строку, что делает его безопасным для повторного использования данных

2 нояб. 2025 г.201В Telegram

👩‍💻 Мемоизация — ускорение функций без переписывания логикиМемоизация — это техника кэширования результатов функций.Если функция вызывается с теми же аргументами, результат возвращается из памяти, а не вычисляется заново➡️ Пример:from functools import lru_cache@lru_cache(maxsize=None)def fib(n): if n < 2: return n return fib(n-1) + fib(n-2)print(fib(35)) # быстро!📌 Здесь @lru_cache запоминает все вызовы fib().Без него вычисление числа Фибоначчи 35 заняло бы секунды, а с ним — доли миллисекунды.

31 окт. 2025 г.267В Telegram

Что выведет код?import asyncioasync def worker(): await asyncio.sleep(0.05) return "ok"async def main(): t = asyncio.create_task(worker()) try: await asyncio.wait_for(asyncio.shield(t), timeout=0.01) except asyncio.TimeoutError: print("timeout") print(t.cancelled(), t.done()) print(await t)asyncio.run(main())

31 окт. 2025 г.218В Telegram