file-io - 作为副作用,处理文件的类或方法是否应该关闭文件?

标签 file-io python

我想知道哪种方法更“Pythonic”/更好地编写处理文件的方法。作为副作用,处理文件的方法是否应该关闭该文件?数据是"file"的概念是否应该从处理数据的方法中完全抽象出来,这意味着它应该期待一些“流”但不一定是文件?:

举个例子,这样做可以吗:

process(open('somefile','r'))
... carry on

process() 关闭文件句柄的地方:

def process(somefile):
    # do some stuff with somefile
    somefile.close()

或者这样更好:

file = open('somefile','r')
process(file)
file.close()

就其值(value)而言,我通常使用 Python 编写相对简单的脚本,这些脚本的用途非常明确,我很可能是唯一一个使用过它们的人。也就是说,我不想教自己任何不好的做法,我宁愿学习最好的做事方式,因为即使是一份小工作也值得做好。

最佳答案

一般来说,打开文件的人最好关闭文件。在你的问题中,第二个例子更好。

这是为了防止可能的混淆和无效操作。

<罢工> 编辑:如果您的实际代码并不比您的示例代码复杂,那么最好让 process() 打开和关闭文件,因为调用者不使用该文件对于其他任何事情。只需传入文件的路径/名称。但是,如果可以想象 process() 的调用者将在文件关闭之前使用该文件,则将文件打开和关闭操作留在 process() 之外。

关于file-io - 作为副作用,处理文件的类或方法是否应该关闭文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147153/

相关文章:

python - 是否可以在 matplotlib (python) 中的数据之上绘制轮廓?

Python:具有程序员定义属性的文件

python - 从文件读取、存储值和数学运算

c# - 尝试在 InstalledLocation StorageFolder 中创建文件异步时访问被拒绝?

python - pytest-selenium 使用 mobile_emulation 或在设置中添加 userAgent

Python每隔n行对数据进行排序?

python - 你能分解这个Pythonic列表理解吗

c++ - 在 C++ 中读取和写入二进制文件

mysql - 在存储过程中使用 LOAD DATA INFILE 命令

java - 通过 Java 在 OS X 上读取文件 - 我的路径正确吗?