В python with ключевое слово используется при работе с неуправляемыми ресурсами (например, файловыми потоками). Оно похоже на оператор using в VB.NET и C #. Это позволяет вам гарантировать, что ресурс "очищается", когда код, который его использует, завершает выполнение, даже если генерируются исключения. Это обеспечивает "синтаксический сахар" для try/finally блоков.
В with инструкции разъясняется код, который ранее использовал try...finally блоки, чтобы гарантировать выполнение кода очистки.
Оператор with - это структура потока управления, базовая структура которой:
with expression [as variable]: with-block
Выражение вычисляется, и в результате должен получиться объект, поддерживающий протокол управления контекстом (то есть имеющий методы __enter__() и __exit__()).
Update исправлена выноска VB согласно комментарию Скотта Вишневски. Я действительно путал with с using.
Это удобно, когда у вас есть две связанные операции, которые вы хотели бы выполнить как пару или более, с блоком кода между ними. Классический пример - открытие файла, манипулирование файлом, затем его закрытие.:
withopen('output.txt', 'w') as f: f.write('Hi there!')
Приведенная выше инструкция with автоматически закроет файл после вложенного блока кода. (Продолжайте читать, чтобы точно увидеть, как происходит закрытие .) Преимущество использования инструкции with в том, что она гарантированно закрывает файл независимо от того, как завершается вложенный блок. Если исключение возникнет до окончания блока, оно закроет файл до того, как исключение будет перехвачено внешним обработчиком исключений. Если вложенный блок должен содержать оператор return или оператор continue или break , оператор with автоматически закроет файл в этих случаях тоже.