🖥 Что такое контекстный менеджер? Как написать свой ?



В питоне есть оператор with. Размещенный внутри код выполняется с особенностью: до и после гарантированно срабатывают события входа в блок withи выхода из него. Объект, который определяет логику событий, называется контекстным менеджером.



На уровне класса события определены методами enter и exit. Первый срабатывает в тот момент, когда ход исполнения программы переходит внутрь with. Метод может вернуть значение. Оно будет доступно низлежащему внутри блока with коду.



exit срабатывает в момент выхода блока, в т.ч. и по причине исключения. В этом случае в метод будет передана тройка значений (exc_class, exc_instance, traceback).



Самый распространённый контекстный менеджер – класс, порожденный функцией open. Он гарантирует, что файл будет закрыт даже в том случае, если внутри блока возникнет ошибка.



Старайтесь выходить из контекстного менеджера как можно быстрее, чтобы освобождать контекст и ресурсы.



with open('file.txt') as f:

data = f.read()

process_data(data)

В примере выше мы вышли из блока with сразу же после прочтения файла. Обработка данных происходит в основном блоке программы.



Контекстные менеджеры можно использовать для временной замены параметров, переменных окружения, транзакций БД.



@python_job_interview