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 🤖