Kodduu Python: post #1540 — TG.ME

🔥 @contextmanager: Создаём свои контекст-менеджеры как профи


from contextlib import contextmanager
import time
import os
from pathlib import Path

@contextmanager
def timer(name: str):
"""Контекст-менеджер для замера времени выполнения блока кода."""
start = time.time()
try:
yield
finally:
print(f"⏱️ {name} заняло {time.time() - start:.4f} сек")

@contextmanager
def chdir(path: str):
"""Временно меняет текущую рабочую директорию."""
old_cwd = os.getcwd()
try:
os.chdir(path)
yield
finally:
os.chdir(old_cwd)

if __name__ == "__main__":
try:
with timer("Тяжёлая операция"):
time.sleep(1.2)

with chdir("/tmp") as tmp:
print(f"Временно в директории: {os.getcwd()}")

print(" Контекст-менеджеры сработали!")
except Exception as e:
print(f"Ошибка: {e}")

📌 @contextmanager из модуля contextlib позволяет создавать свои контекст-менеджеры одной функцией. Идеально для таймеров, временной смены директории, управления ресурсами, транзакций и любой логики «до/после».

Подпишись 👉🏻 @KodduuPython 🤖
July 17, 2026 174 2