在Python中,不将未保存到变量的文件关闭是一种不良实践吗?

10 浏览
0 Comments

在Python中,不将未保存到变量的文件关闭是一种不良实践吗?

在使用Python编程时,我有时会使用这种语法:

open(filename,'w').write("sometext")

据我所知,这会导致Python的垃圾回收器关闭文件,但我听说GC的行为是不确定的,这可能会有问题。

这是真的吗?我应该总是使用这种方式:

with open(filename) as f: 
   f.write()

0
0 Comments

在Python中,不关闭未保存到变量的文件是一种不良的做法。这种行为的出现是因为一些人可能会错误地将垃圾回收和引用计数混淆起来。在CPython中,使用open(...).write(...)的方式会得到期望的行为,因为在该行执行完毕后,文件对象的引用计数将降为0,并立即被删除。然而,这并不是一种推荐的做法。使用with语句更加优雅、可读和符合Python风格,并且显性比隐性更好。虽然这种行为在CPython中是特定的行为,但也不是一种有保证的行为。未来的CPython版本可能会决定放弃引用计数,像Jython和IronPython一样改用垃圾计数。因此,为了避免不确定性,建议始终使用with语句来关闭文件。

0