Что такое ключевое слово python "with", используемое для?
Пример из: http://docs.python.org/tutorial/inputoutput.html
>>> with open('/tmp/workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
Что такое ключевое слово python "with", используемое для?
Пример из: http://docs.python.org/tutorial/inputoutput.html
>>> with open('/tmp/workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
В 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
.
Объяснение из журнала Preshing on Programming:
Его удобно, когда у вас есть две связанные операции, которые вам нравятся выполняться как пара, с блоком кода между ними. Классический Например, открывается файл, обрабатывается файл, затем закрытие:
with open('output.txt', 'w') as f: f.write('Hi there!')
Вышеприведенная инструкция автоматически закроет файл после вложенный блок кода. (Продолжайте читать, чтобы узнать, как закрыть происходит.) Преимущество использования оператора with состоит в том, что оно гарантированно закрыть файл независимо от того, как выходит вложенный блок. Если исключение происходит до конца блока, оно закрывает файл до того, как исключение будет обнаружено внешним обработчиком исключений. Если вложенный блок должен содержать оператор возврата или продолжить или оператор break, оператор WITH автоматически закрывает файл в этих случаях тоже.