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 =? Это - просто синтаксический сахар? Просто сохранив одну строку кода?
Чтобы быть эквивалентным с версией оператора
, написанный вами код должен выглядеть следующим образом:
f = open("hello.txt", "wb")
try:
f.write("Hello Python!\n")
finally:
f.close()
Хотя это может показаться синтаксическим сахаром, он гарантирует, что вы высвобождаете ресурсы. В общем, мир более сложен, чем эти надуманные примеры, и если вы забудете попробовать .. кроме ...
или не сможете справиться с крайним случаем, у вас на руках будет утечка ресурсов.
Оператор with
избавляет вас от этих утечек, облегчая написание чистого кода. Полное объяснение можно найти в PEP 343 , там много примеров.
Если f.write
вызывает исключение, f.close ()
вызывается, когда вы используете с
и не вызывается во втором случае. Кроме того, f
имеет меньшую область видимости, и код становится более чистым при использовании с.
Первый по-прежнему закрывает f
, если исключение возникает во время f.write()
.