В чем преимущество использования оператора «with .. as» в Python? - PullRequest
19 голосов
/ 29 апреля 2010
with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

похоже на

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()

В чем преимущество использования open .. as вместо f =? Это просто синтаксический сахар? Просто сохранить одну строку кода?

Ответы [ 3 ]

26 голосов
/ 29 апреля 2010

Чтобы быть эквивалентной версии оператора with, написанный вами код должен выглядеть следующим образом:

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()

Хотя это может показаться синтаксическим сахаром, оно обеспечивает высвобождение ресурсов. Как правило, мир сложнее, чем эти придуманные примеры, и если вы забудете try.. except... или не справитесь с крайним случаем, у вас будут утечки ресурсов.

Оператор with избавляет вас от этих утечек, облегчая написание чистого кода. Для полного объяснения посмотрите на PEP 343 , у него есть много примеров.

13 голосов
/ 29 апреля 2010

Если f.write выдает исключение, f.close() вызывается при использовании with и не вызывается во втором случае. Кроме того, f имеет меньшую область действия, и код становится чище при использовании with.

3 голосов
/ 29 апреля 2010

Первый по-прежнему закрывается f, если во время f.write().

возникает исключение.
...