Открытый файл: этот плохой стиль Python?

Просто сделайте:

# системный список сапожника

# система сапожника удаляют - имя = "одно из имен в списке"

# и т.д. и т.д.

11
задан Community 23 May 2017 в 12:26
поделиться

6 ответов

Для записи: Это немного длиннее, и файл немедленно закрывается:

from __future__ import with_statement

with open(filename, "r") as f:
    data = f.read()
30
ответ дан 3 December 2019 в 01:04
поделиться

Это правда, что в конце концов он закроется, но в конечном итоге может быть недостаточно скоро. Если вы используете это внутри цикла, в системе могут закончиться дескрипторы файлов до того, как сборщик мусора перейдет к файловым объектам.

7
ответ дан 3 December 2019 в 01:04
поделиться

Код работает точно так, как вы говорите, но, тем не менее, это плохой стиль. Ваш код полагается на предположения, которые сейчас могут быть правдой, но не всегда. Не исключено, что ваш код будет запущен в ситуации, когда файл, который открывается, а не закрывается , имеет значение . Стоит ли рисковать, чтобы сэкономить 1 или 2 строчки кода? Я так не думаю.

4
ответ дан 3 December 2019 в 01:04
поделиться

Нет, это вполне разумный стиль ИМО в стиле Python, согласно вашим рассуждениям.

Обновление: Здесь много комментариев о том, нужно ли сразу убирать файловые объекты или нет . Вместо того чтобы строить предположения, я немного покопался. Вот что я вижу:


Из комментария в Python object.h :

Макросы Py_INCREF (op) и Py_DECREF (op) используются для увеличения или уменьшить количество ссылок. Py_DECREF вызывает деаллокатор объекта функция, когда счетчик ссылок падает до 0

Глядя в Python fileobject.c :

Таблица функций для файловых объектов указывает на функцию file_dealloc . Эта функция вызывает close_the_file , который, в свою очередь, закрывает файл.


Поэтому кажется разумным заявить, что на данный момент на CPython, когда нет больше ссылок на файловый объект, он закрывается без промедления. Если вы считаете, что это толкование неверно, оставьте комментарий, объяснив, почему вы так считаете.
3
ответ дан 3 December 2019 в 01:04
поделиться

мне нравится .. Я часто читаю такие файлы.

1
ответ дан 3 December 2019 в 01:04
поделиться

Несмотря на то, что он работает, как ожидалось, я думаю, что он не удается в два значения:

  1. Ваш код не будет масштабировать без проблем, потому что вы читаете весь файл в память, и это может может быть не обязательно то, что вы хотите.
  2. Согласно Дзену Python (попробуйте Импортируйте это в приглашении Python, чтобы получить его) «Явнее лучше, чем неявное», и, неспособность явно закрыть файл, вы можете запутать кого-то, кто, вниз по дороге, останется с вашим кодом для обслуживания.

Это действительно помогает быть явным! Python поощряет явный стиль.

Кроме того, для сброса скрипта ваш стиль имеет смысл.

Может быть, вы выиграете из этого ответа этого ответа .

2
ответ дан 3 December 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: