Скажем, у вас есть:
def my_func():
fh = open(...)
try:
print fh.read()
finally:
fh.close()
Мой первый вопрос: :Стоит ли использовать оператор try/finally (или with )? Разве файл не закрывается в любом случае, когда функция завершается (через сборку мусора )?
Я наткнулся на это после прочтения рецепта из «поваренной книги питона» Мартелли, где
all_the_text = open('thefile.txt').read()
поставляется с комментарием :«Когда вы это делаете, у вас больше нет ссылки на файловый объект, как только операция чтения завершается. На практике Python сразу замечает отсутствие ссылки,и немедленно закрывает файл."
Мой пример функции почти такой же. У вас есть отсылка, просто у отсылки очень короткая жизнь.
Мой второй вопрос: :Что означает «немедленно» в утверждении Мартелли? Даже если у вас вообще нет ссылки, разве закрытие файла не происходит во время сборки мусора?