我有一个方法可以根据输入检测它应该打开的文件,打开文件,然后返回文件对象。
def find_and_open(search_term):
# ... logic to find file
return open(filename, 'r')
我喜欢这种方式,因为它隐藏了调用者的大部分实现。你给它你的标准,它吐出文件对象。如果你打算打开它,为什么还要使用String路径呢?
但是,在其他Python项目中,我倾向于看到这样的方法返回文件路径的字符串,而不是文件对象本身。然后在最后一刻打开文件,读取/编辑并关闭。
我的问题是:
从性能的角度来看,传递文件对象会带来更多的开销吗?我认为无论它指向什么引用都是引用,但也许在解释器中有一些东西会使String引用比文件引用更快传递?
从纯粹的“Pythonic”角度来看,返回文件对象或String路径(然后尽可能晚地打开文件)更有意义吗?
答案 0 :(得分:3)
在处理文件对象时,最好使用
短得多with
关键字。这样做的好处是,即使在路上引发异常,文件也会在套件完成后正确关闭。它也比编写等效try
-finally
块...
请注意,您可以使用with
打开文件并通过嵌套函数或使用yield
将文件对象传递给其他函数。虽然在大多数情况下我认为这比传递文件字符串更少pythonic。
简单比复杂更好。 Flat比嵌套更好。
您可能也对pathlib感兴趣。