也许这个问题毫无意义,但我想知道是否有推荐的做法"关于如何将文件传递给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)
是否有理由使用一种方法而不是另一种方法?
答案 0 :(得分:2)
两种方式都有其优势和劣势。当一个函数接受一个打开的文件对象时,它变得更容易与其他类似文件的对象一起使用,如io.StringIO
。另一方面,在函数内使用with
语句非常优雅。混合解决方案将接受路径(字符串)和类似文件的对象。有几个图书馆这样做。
答案 1 :(得分:1)
建议传递类似于对象的文件而不是传递路径。这意味着将函数重用于其他类型的文件将更容易,而不仅仅是在磁盘上具有路径的文件,例如BytesIO https://docs.python.org/3/library/io.html#io.BytesIO。
您仍然可以在文件中使用with
语句,例如对象,只有在打开它时才必须使用它。