绕过文件对象而不是文件名的开销?

时间:2015-07-15 02:26:57

标签: python coding-style

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

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

我喜欢这种方式,因为它隐藏了调用者的大部分实现。你给它你的标准,它吐出文件对象。如果你打算打开它,为什么还要使用String路径呢?

但是,在其他Python项目中,我倾向于看到这样的方法返回文件路径的字符串,而不是文件对象本身。然后在最后一刻打开文件,读取/编辑并关闭。

我的问题是:

  • 从性能的角度来看,传递文件对象会带来更多的开销吗?我认为无论它指向什么引用都是引用,但也许在解释器中有一些东西会使String引用比文件引用更快传递?

  • 从纯粹的“Pythonic”角度来看,返回文件对象或String路径(然后尽可能晚地打开文件)更有意义吗?

1 个答案:

答案 0 :(得分:3)

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

    在处理文件对象时,最好使用with关键字。这样做的好处是,即使在路上引发异常,文件也会在套件完成后正确关闭。它也比编写等效try - finally块...

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

      

    简单比复杂更好。       Flat比嵌套更好。

    您可能也对pathlib感兴趣。