Подтвердить что ты не робот

Какое преимущество использования выражения "with.. as" в 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()

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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