【发布时间】:2012-07-09 16:41:07
【问题描述】:
假设你有:
def my_func():
fh = open(...)
try:
print fh.read()
finally:
fh.close()
我的第一个问题是:使用 try/finally(或 with)语句是否值得?当函数终止时(通过垃圾收集)文件是否仍然关闭?
我在阅读 Martelli 的“python 食谱”中的食谱后发现了这一点
all_the_text = open('thefile.txt').read()
附带评论:“当你这样做时,一旦读取操作完成,你就不再拥有对文件对象的引用。实际上,Python 会立即注意到缺少引用,并立即关闭文件。”
我的函数示例几乎相同。您确实有参考,只是参考的寿命很短。
我的第二个问题是:Martelli 声明中的“立即”是什么意思?即使您根本没有引用,文件关闭也不会在垃圾收集时发生吗?
【问题讨论】:
-
我不会说你的例子是相似的。您将文件分配给变量
fh,而open('thefile.txt').read()只是在创建引用时直接使用read,而不保存它。我想这就是他立即的意思
标签: python file garbage-collection