Какова длительность файла
объект, возвращаемый кодом примера
выше
Этот код не возвращает объект файла (как правильно говорит заголовок Q, он получает его в качестве аргумента).
В текущем CPython файл будет закрыт во время возврата функции (поскольку функция не прячет ссылки на объект файла в более надежные места). В других реализациях файл будет закрыт "в конце концов", но точное время не указано.
В зависимости от семантики немедленного закрытия CPython (которая может измениться, когда будущий CPython перейдет на более совершенные механизмы сборки мусора), хотя это очень традиционный подход, не является наилучшей практикой.
Скорее, лучше всего использовать выражение with
:
with open(...) as f:
reader = pickle.load(f)
При использовании при немедленное закрытие файла (как только заканчивается тело оператора with
) гарантируется во всех реализациях.
Обратите внимание, что в Python 2.5 вам нужно from __future__ import with_statement
, чтобы использовать with
. В версии 2.6 или выше такой «импорт из будущего» не требуется для этой цели (это безобидно, но если вы знаете, что никогда не собираетесь использовать версию 2.5, она избыточна и лучше удалена).