Какое ключевое слово python используется для использования?

Что такое ключевое слово python "with", используемое для?

Пример из: http://docs.python.org/tutorial/inputoutput.html

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

Ответ 1

В python ключевое слово with используется при работе с неуправляемыми ресурсами (например, файловыми потоками). Он похож на оператор using в VB.NET и С#. Это позволяет гарантировать, что ресурс "очищается", когда код, который его использует, заканчивается, даже если выбраны исключения. Он обеспечивает "синтаксический сахар" для блоков try/finally.

От Документы Python:

Оператор with уточняет код, который ранее использовал бы блоки try...finally для обеспечения выполнения кода очистки. В этом разделе Ill обсуждает утверждение, которое обычно будет использоваться. В следующем разделе Ill рассмотрит детали реализации и покажет, как писать объекты для использования с этим оператором.

Оператор with представляет собой структуру потока управления, базовая структура которой:

with expression [as variable]:
    with-block

Выражение оценивается, и оно должно приводить к объекту, который поддерживает протокол управления контекстом (то есть имеет методы __enter__() и __exit__()).

Обновить фиксированную выноску VB за комментарий Скотта Вишневского. Я действительно путаю with с using.

Ответ 2

Объяснение из журнала Preshing on Programming:

Его удобно, когда у вас есть две связанные операции, которые вам нравятся выполняться как пара, с блоком кода между ними. Классический Например, открывается файл, обрабатывается файл, затем     закрытие:

 with open('output.txt', 'w') as f:
     f.write('Hi there!')

Вышеприведенная инструкция автоматически закроет файл после вложенный блок кода. (Продолжайте читать, чтобы узнать, как закрыть происходит.) Преимущество использования оператора with состоит в том, что оно гарантированно закрыть файл независимо от того, как выходит вложенный блок. Если исключение происходит до конца блока, оно закрывает файл до того, как исключение будет обнаружено внешним обработчиком исключений. Если вложенный блок должен содержать оператор возврата или продолжить или оператор break, оператор WITH автоматически закрывает файл в этих случаях тоже.