当使用一个文件对象"__iter__"方法直接操作还需要close?
我们平常使用:
for line in open("t.txt"):
#do some thing with line
pass
没有发现问题,是因为在程序运行完后垃圾收集时自动将open打开的file handler自动close掉了.虽然有垃圾处理.但是手动显示关闭才是准确可控. 所以我们可能会写下如下:
f = open("t.txt")
try:
#do some thing with line
finally:
f.close()
代码有点多,我仅仅只是需要从文件中读取内容,其他的错误我都不在乎,流程可能是如果文件打不开,那么结果必然出错.好在python2.5以及之后的版本提供了with_statement,简化了需要关闭的IO操作.
from __future__ import with_statement
with open("t.txt") as f:
#do some thing with line
pass
不仅仅局限于file handler,你也可以使用在管道IO上:
with os.popen(commend) as f:
return f.read()
当然,在linux中,他们都算是一个file hanlder. 你甚至可以对任何需要使用完就关闭的对象使用with,比如Lock:
with threading.Lock():
pass # do some thread safe stuff
即时关闭占用着的内存.节约资源,人人有责.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。