如果使用';打开文件,则无需关闭该文件;打印';用Python?

如果使用';打开文件,则无需关闭该文件;打印';用Python?,python,file,Python,File,我通常使用: f = open(path,'w') print >> f, string f.close() 然而,我在其他人的代码中看到: print >> open(path,'w'), string 也很有效 因此,如果使用“打印”打开文件,我们不必关闭该文件。是的,您仍然需要关闭该文件。与印刷品没有区别 关闭文件会将数据刷新到磁盘并释放文件句柄 在CPython中,当f的参考计数降至零时,系统将为您执行此操作。在PyPy、IronPython和Jython中,

我通常使用:

f = open(path,'w')
print >> f, string
f.close()
然而,我在其他人的代码中看到:

print >> open(path,'w'), string
也很有效


因此,如果使用“打印”打开文件,我们不必关闭该文件。

是的,您仍然需要关闭该文件。与印刷品没有区别

关闭文件会将数据刷新到磁盘并释放文件句柄

在CPython中,当f的参考计数降至零时,系统将为您执行此操作。在PyPy、IronPython和Jython中,您需要等待垃圾收集器运行(以便自动关闭文件)。与其采用依赖内存管理器自动关闭的脆弱实践,不如首选实践是控制文件的关闭

由于显式关闭文件是一种最佳实践,Python为文件对象提供了一个上下文管理器,使其非常容易:

with open(path, 'w') as f:
    print >> f, string

这将在您离开的正文时关闭您的文件。

无论您如何使用
open()
;无论上下文如何,它仍然是一个打开的文件对象。请始终将
一起使用。有关更多信息,请参阅PEP343。@MartijnPieters,那么第二种用法是错误的吗?是的。第二种用法是错误的。这是一个明显的问题,因为它询问打印语句是否有例外情况。+1:我很高兴你深入了解了不只是CPython的细节。