Просто сделайте:
# системный список сапожника
# система сапожника удаляют - имя = "одно из имен в списке"
# и т.д. и т.д.
Для записи: Это немного длиннее, и файл немедленно закрывается:
from __future__ import with_statement
with open(filename, "r") as f:
data = f.read()
Это правда, что в конце концов он закроется, но в конечном итоге может быть недостаточно скоро. Если вы используете это внутри цикла, в системе могут закончиться дескрипторы файлов до того, как сборщик мусора перейдет к файловым объектам.
Код работает точно так, как вы говорите, но, тем не менее, это плохой стиль. Ваш код полагается на предположения, которые сейчас могут быть правдой, но не всегда. Не исключено, что ваш код будет запущен в ситуации, когда файл, который открывается, а не закрывается , имеет значение . Стоит ли рисковать, чтобы сэкономить 1 или 2 строчки кода? Я так не думаю.
Нет, это вполне разумный стиль ИМО в стиле Python, согласно вашим рассуждениям.
Обновление: Здесь много комментариев о том, нужно ли сразу убирать файловые объекты или нет . Вместо того чтобы строить предположения, я немного покопался. Вот что я вижу:
object.h
:
Макросы Py_INCREF (op) и Py_DECREF (op) используются для увеличения или уменьшить количество ссылок. Py_DECREF вызывает деаллокатор объекта функция, когда счетчик ссылок падает до 0
Глядя в Python fileobject.c
:
Таблица функций для файловых объектов указывает на функцию file_dealloc
. Эта функция
вызывает close_the_file
, который, в свою очередь, закрывает файл.
Несмотря на то, что он работает, как ожидалось, я думаю, что он не удается в два значения:
Импортируйте это
в приглашении Python, чтобы получить его) «Явнее лучше, чем неявное», и, неспособность явно закрыть файл, вы можете запутать кого-то, кто, вниз по дороге, останется с вашим кодом для обслуживания. Это действительно помогает быть явным! Python поощряет явный стиль.
Кроме того, для сброса скрипта ваш стиль имеет смысл.
Может быть, вы выиграете из этого ответа этого ответа .