🐍 Укус питона 🐍
رفتن به کانال در Telegram
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки. 👽 Админ - @tg_adminisrator 🔊 Купить рекламу: https://telega.in/c/byteofpython 👉 Чат: @abyteofpython 👉 Поделиться с друзьями: @byteofpython
نمایش بیشتر2 334
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-117 روز
-3730 روز
در حال بارگیری داده...
کانالهای مشابه
ابر برچسبها
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
مارس '26
مارس '26
+2
در 0 کانالها
فوریه '26
+2
در 0 کانالها
Get PRO
ژانویه '26
+5
در 0 کانالها
Get PRO
دسامبر '25
+1
در 0 کانالها
Get PRO
نوامبر '25
+3
در 0 کانالها
Get PRO
اکتبر '25
+5
در 0 کانالها
Get PRO
سپتامبر '25
+5
در 0 کانالها
Get PRO
اوت '25
+7
در 0 کانالها
Get PRO
ژوئیه '25
+6
در 0 کانالها
Get PRO
ژوئن '25
+4
در 0 کانالها
Get PRO
مه '25
+3
در 0 کانالها
Get PRO
آوریل '25
+53
در 0 کانالها
Get PRO
مارس '25
+9
در 0 کانالها
Get PRO
فوریه '25
+11
در 0 کانالها
Get PRO
ژانویه '25
+10
در 0 کانالها
Get PRO
دسامبر '24
+8
در 0 کانالها
Get PRO
نوامبر '24
+9
در 0 کانالها
Get PRO
اکتبر '24
+9
در 0 کانالها
Get PRO
سپتامبر '24
+15
در 0 کانالها
Get PRO
اوت '24
+11
در 0 کانالها
Get PRO
ژوئیه '24
+15
در 0 کانالها
Get PRO
ژوئن '24
+10
در 0 کانالها
Get PRO
مه '24
+20
در 0 کانالها
Get PRO
آوریل '24
+17
در 0 کانالها
Get PRO
مارس '24
+25
در 0 کانالها
Get PRO
فوریه '24
+18
در 1 کانالها
Get PRO
ژانویه '24
+12
در 0 کانالها
Get PRO
دسامبر '23
+7
در 1 کانالها
Get PRO
نوامبر '23
+232
در 8 کانالها
Get PRO
اکتبر '23
+13
در 1 کانالها
Get PRO
سپتامبر '23
+14
در 0 کانالها
Get PRO
اوت '23
+18
در 0 کانالها
Get PRO
ژوئیه '23
+21
در 0 کانالها
Get PRO
ژوئن '23
+9
در 0 کانالها
Get PRO
مه '23
+17
در 0 کانالها
Get PRO
آوریل '23
+27
در 0 کانالها
Get PRO
مارس '23
+48
در 0 کانالها
Get PRO
فوریه '23
+50
در 0 کانالها
Get PRO
ژانویه '23
+77
در 0 کانالها
Get PRO
دسامبر '22
+359
در 0 کانالها
Get PRO
نوامبر '22
+259
در 0 کانالها
Get PRO
اکتبر '22
+823
در 0 کانالها
Get PRO
سپتامبر '22
+1 769
در 0 کانالها
Get PRO
اوت '22
+1 898
در 0 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 18 مارس | 0 | |||
| 17 مارس | 0 | |||
| 16 مارس | 0 | |||
| 15 مارس | 0 | |||
| 14 مارس | 0 | |||
| 13 مارس | 0 | |||
| 12 مارس | 0 | |||
| 11 مارس | +1 | |||
| 10 مارس | 0 | |||
| 09 مارس | 0 | |||
| 08 مارس | 0 | |||
| 07 مارس | 0 | |||
| 06 مارس | 0 | |||
| 05 مارس | 0 | |||
| 04 مارس | +1 | |||
| 03 مارس | 0 | |||
| 02 مارس | 0 | |||
| 01 مارس | 0 |
پستهای کانال
Массивы в pattern matching.
В качестве шаблонов также могут выступать массивы. Подобным шаблоны также могут содержать либо конкретные значения, либо переменные, которые передаются элементы массивов, либо символ прочерка _, если элемент массива не важен.
В данном случае функция print_people принимает массив, который, как предполагается, состоит из трех элементов, рассмотрим их в следующей части.
🐍 Укус питона // 💬 Чат // #теория #pattern_matching #массивы
| 2 | 👩💻 Динамическое создание классов — метапрограммирование в чистом виде
В 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 прямо во время исполнения. | 236 |
| 3 | Ответ: | 225 |
| 4 | Что выведет код?
x = 0
def 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) | 194 |
| 5 | بدون متن... | 200 |
| 6 | 👩💻 Контракты через аннотации — не просто подсказки типов
Аннотации типов (type hints) — это не только помощь IDE.
С их помощью можно внедрять контроль логики исполнения — проверять типы, значения и инварианты прямо во время работы программы.
➡️ Пример:
from typing import get_type_hints
def 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_types
def greet(name: str, age: int):
print(f"{name}, {age}")
greet("Анна", 25) # ✅
greet("Анна", "25") # ❌ TypeError
📌 Здесь аннотации становятся частью исполняемого контракта, а не просто документацией. | 193 |
| 7 | 👩💻 WeakRef — как избежать утечек памяти в Python
Иногда объект больше не нужен, но на него всё ещё ссылаются другие части программы. Обычная ссылка удерживает объект в памяти, а слабая ссылка (weak reference) — нет.
Она не мешает сборщику мусора удалить объект, если больше нет сильных ссылок
➡️ Пример:
import weakref
class 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 obj
print(ref()) # None — объект собран GC
📌 weakref.ref() создаёт слабую ссылку: объект может быть удалён, даже если ссылка ещё существует. | 164 |
| 8 | Ответ: | 159 |
| 9 | Что выведет код?
import itertools
lst = [[1, 2], [3]]
it = itertools.chain.from_iterable(lst)
print(next(it))
lst.append([4, 5])
print(list(it)) | 159 |
| 10 | بدون متن... | 170 |
| 11 | 👩💻 Протокол дескрипторов — скрытый механизм свойств и 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] = value
class User:
age = LoggedAttribute("age")
u = User()
u.age = 30
print(u.age)
📌 При обращении к u.age срабатывают методы дескриптора, а не прямой доступ к атрибуту. | 161 |
| 12 | 👩💻 Протокол итерации — как работает цикл 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 StopIteration
for i in Counter(3):
print(i)
# 1 2 3
📌 Цикл for просто вызывает next() до тех пор, пока не появится StopIteration. | 147 |
| 13 | Ответ: | 153 |
| 14 | Что выведет код?
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) | 164 |
| 15 | ❓ Зачем используется метод 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() удобно использовать при очистке данных, форматировании строк, замене символов и шаблонов в текстах. Метод не изменяет исходную строку, что делает его безопасным для повторного использования данных | 151 |
| 16 | بدون متن... | 196 |
| 17 | 👩💻 Мемоизация — ускорение функций без переписывания логики
Мемоизация — это техника кэширования результатов функций.
Если функция вызывается с теми же аргументами, результат возвращается из памяти, а не вычисляется заново
➡️ Пример:
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 заняло бы секунды, а с ним — доли миллисекунды. | 222 |
| 18 | Ответ: | 199 |
| 19 | Что выведет код?
import asyncio
async 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()) | 197 |
| 20 | بدون متن... | 167 |
