Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pythonworldru.pdf
Скачиваний:
249
Добавлен:
11.03.2016
Размер:
709.75 Кб
Скачать

Глава 22

With ... as - менеджеры контекста

Конструкция with ... as используется для оборачивания выполнения блока инструкций менеджером контекста. Иногда это более удобная конструкция, чем try...except...1nally.

Синтаксис конструкции with ... as:

"with" expression ["as" target] ("," expression ["as" target])* ":" suite

Теперь по порядку о том, что происходит при выполнении данного блока:

1.Выполняется выражение в конструкции with ... as.

2.Загружается специальный метод __exit__ для дальнейшего использования.

3.Выполняется метод __enter__. Если конструкция with включает в себя слово as, то возвращаемое методом __enter__ значение записывается в переменную.

4.Выполняется suite.

5.Вызывается метод __exit__, причём неважно, выполнилось ли suite или произошло исключение. В этот метод передаются параметры исключения, если оно произошло, или во всех аргументах значение None, если исключения не было.

Если в конструкции with - as было несколько выражений, то это эквивалентно нескольким вложенным конструкциям:

with A() as a, B() as b: suite

эквивалентно

with A() as a: with B() as b:

suite

Для чего применяется конструкция with ... as? Для гарантии того, что критические функции выполнятся в любом случае. Самый распространённый пример использования этой конструкции - открытие файлов. Я уже рассказывал об открытии файлов с помощью

67

Самоучитель Python, Выпуск 0.2

функции open, однако конструкция with ... as, как правило, является более удобной и гарантирует закрытие файла в любом случае.

Например:

with open('newfile.txt', 'w', encoding='utf-8') as g: d = int(input())

print('1 / {} = {}'.format(d, 1 / d), file=g)

И вы можете быть уверены, что файл будет закрыт вне зависимости от того, что введёт пользователь.

68

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]