Мне интересно, какой из методов Pythonic лучше использовать для обработки файлов? Должен ли метод, обрабатывающий файл, закрыть этот файл в качестве побочного эффекта? Должна ли концепция данных как «файл» быть полностью абстрагирована от метода, который обрабатывает данные, а это значит, что он должен ожидать некоторый «поток», но не обязательно файл?
Например, нормально ли это делать:
process(open('somefile','r'))
... carry on
Где process()
закрывает дескриптор файла:
def process(somefile):
# do some stuff with somefile
somefile.close()
Или это лучше:
file = open('somefile','r')
process(file)
file.close()
Что бы это ни стоило, я обычно использую Python для написания относительно простых сценариев, которые имеют исключительно конкретную цель, и я, вероятно, буду единственным, кто их использует. Тем не менее, я не хочу учить себя никаким плохим практикам, и я бы лучше изучил лучший способ сделать что-то, поскольку даже небольшая работа стоит делать хорошо.