tgoop.com/pythonl/4976
Create:
Last Update:
Last Update:
🐍 Продвинутый трюк в Python: свой `with` без классов
Хочешь выполнять код до и после блока with
, но не писать громоздкий класс с __enter__
и __exit__
? Используй @contextmanager
из contextlib
:
from contextlib import contextmanager
import time
@contextmanager
def timer(label="Block"):
start = time.time()
print(f"[{label}] Start")
try:
yield
finally:
end = time.time()
print(f"[{label}] End — elapsed: {end - start:.3f}s")
# Пример использования
with timer("Download step"):
time.sleep(1.2)
📌 До yield — код до with
📌 После yield — код после with
🔥 Это мощный способ:
- логировать действия,
- временно менять окружение (stdout, переменные, режимы),
- управлять ресурсами, не создавая классы.
@pythonl
BY Python/ django
Share with your friend now:
tgoop.com/pythonl/4976