Стоит ли закрывать файлы в мелких функциях?

Скажем, у вас есть:

def my_func():
    fh = open(...)
    try:
        print fh.read()
    finally:
        fh.close()

Мой первый вопрос: :Стоит ли использовать оператор try/finally (или with )? Разве файл не закрывается в любом случае, когда функция завершается (через сборку мусора )?

Я наткнулся на это после прочтения рецепта из «поваренной книги питона» Мартелли, где

all_the_text = open('thefile.txt').read()

поставляется с комментарием :«Когда вы это делаете, у вас больше нет ссылки на файловый объект, как только операция чтения завершается. На практике Python сразу замечает отсутствие ссылки,и немедленно закрывает файл."

Мой пример функции почти такой же. У вас есть отсылка, просто у отсылки очень короткая жизнь.

Мой второй вопрос: :Что означает «немедленно» в утверждении Мартелли? Даже если у вас вообще нет ссылки, разве закрытие файла не происходит во время сборки мусора?

8
задан Simeon Visser 10 July 2012 в 12:10
поделиться