我应该在函数外部还是内部打开文件?

时间:2015-12-12 13:50:28

标签: python file

也许这个问题毫无意义,但我想知道是否有推荐的做法"关于如何将文件传递给Python中的函数。

我应该传递文件的路径还是打开的文件本身?

我应该这样做:

def func(file):
  file.write(...)

with open(file_path, 'w') as file:
  func(file)

......或:

def func(file_path):
  with open(file_path, 'w') as file:
    file.write(...)

func(file_path)

是否有理由使用一种方法而不是另一种方法?

2 个答案:

答案 0 :(得分:2)

两种方式都有其优势和劣势。当一个函数接受一个打开的文件对象时,它变得更容易与其他类似文件的对象一起使用,如io.StringIO。另一方面,在函数内使用with语句非常优雅。混合解决方案将接受路径(字符串)和类似文件的对象。有几个图书馆这样做。

答案 1 :(得分:1)

建议传递类似于对象的文件而不是传递路径。这意味着将函数重用于其他类型的文件将更容易,而不仅仅是在磁盘上具有路径的文件,例如BytesIO https://docs.python.org/3/library/io.html#io.BytesIO

您仍然可以在文件中使用with语句,例如对象,只有在打开它时才必须使用它。