С чем преимущество использования '.. оператор a в Python?

with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

кажется, совпадает с

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

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

19
задан prosseek 29 April 2010 в 15:08
поделиться

3 ответа

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

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

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

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

26
ответ дан 30 November 2019 в 03:12
поделиться

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

13
ответ дан 30 November 2019 в 03:12
поделиться

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

3
ответ дан 30 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: