Sobes.tech
Middle
97
questionbank

Что такое контекстный менеджер?

Ответ от нейросети

sobes.tech AI

Контекстный менеджер в Python — это объект, который определяет контекст выполнения, управляя выделением и освобождением ресурсов. Он реализует протокол контекстного менеджера, содержащий магические методы __enter__ и __exit__.

  • __enter__: Вызывается при входе в контекст, обычно возвращает ресурс, которым нужно управлять.
  • __exit__: Вызывается при выходе из контекста, даже если произошло исключение. Отвечает за освобождение ресурса. Получает три аргумента: тип исключения, объект исключения и трассировка стека (или None, если исключения не было).

Часто используется с оператором with для автоматического управления ресурсами, такими как файлы, сетевые соединения или блокировки.

// Пример использования контекстного менеджера для работы с файлом
with open('myfile.txt', 'r') as f:
    content = f.read()
// Файл автоматически закрывается после выхода из блока with

Контекстные менеджеры можно создавать, реализуя протокол или используя декоратор @contextmanager из модуля contextlib.

// Пример создания контекстного менеджера с использованием декоратора
from contextlib import contextmanager

@contextmanager
def timer():
    import time
    start_time = time.time()
    yield // Точка входа в контекст
    end_time = time.time()
    print(f"Время выполнения: {end_time - start_time:.2f} сек.")

// Использование созданного контекстного менеджера
with timer():
    # Код, который нужно измерить
    import time
    time.sleep(1)