В Python 2.5 добавили ключевое слово, под названием оператор with
. Это ключевое слово позволяет разработчику создавать контекстные менеджеры.
Контекстный менеджер - это конструкция, которая позволяет разработчику работать с ресурсами в автоматическом режиме.
Контекстные менеджеры обычно используются для захвата и освобождения ресурсов, но это не единственный случай их использования. Они полезны для унификации общего кода настройки и разрыва или любой пары операций, которые необходимо выполнить до или после действия.
Например, вам может потребоваться открыть файл, вписать в него кучу всего и закрыть. Это классический пример работы контекстного менеджера. Фактически, Python создает один такой экземпляр автоматически каждый раз, когда вы открываете файл, используя оператор with:
Сперва рассмотрим обработку файла без использования контекстного менеджера with:
tasks = open('file.txt') for one in tasks: print(one, end='') tasks.close()
Python поддерживает методику "открыть, обработать и закрыть". Однако большинство программистов предпочитают использовать инструкцию with.
Обработаем тот же файл, но уже с помощью инструкции with:
with open('file.txt') as tasks: for one in tasks: print(one, end='')
При обработке файла с помощью контекстного менеджера with исчезает вызов close(). Инструкция with автоматически вызывает close(), когда блок кода завершает выполнение.
Оператор может применяться в тех случаях, когда до и после некоторых действий должны обязательно выполняться некоторые другие действия, независимо от возбуждённых в блоке исключений или операторов return: файлы должны быть закрыты, ресурсы освобождены, перенаправление стандартного ввода вывода закончено и т. п. Оператор улучшает читаемость кода, а значит, помогает предотвращать ошибки.