传递文件对象而不是文件名的开销?

Overhead of passing around a file object instead of file name?

我有一种方法可以根据输入检测应该打开的文件,打开文件,然后 returns 文件对象。

def find_and_open(search_term):
    # ... logic to find file
    return open(filename, 'r')

我喜欢这种方式,因为它向调用者隐藏了大部分实现。你给它你的标准,它吐出文件对象。如果您无论如何都要打开它,为什么还要考虑字符串路径呢?

然而,在其他 Python 项目中,我倾向于看到这样的方法 return 文件路径的字符串,而不是文件对象本身。然后在最后一分钟打开文件,read/edited,然后关闭。

我的问题是:

  1. 性能不太可能成为问题。读取和写入磁盘比从 RAM 读取慢几个数量级,因此传递指针不太可能成为性能瓶颈。 1
  2. 来自python docs

    It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way. It is also much shorter than writing equivalent try-finally blocks ...

请注意,您可以使用 with 打开文件 通过嵌套函数或使用 yield 将文件对象传递给其他函数].尽管在大多数情况下我认为这比传递文件字符串更不符合 pythonic。

Simple is better than complex. Flat is better than nested.

您可能还对 pathlib 感兴趣。