当我在 IPython3 shell 中使用这段代码时
>>>data = open('file').read()
然后检查打开的文件描述符:
lsof | grep file
我发现空列表
当我使用这个时:
>>>open('file')
lsof
显示两个项目。问题是为什么第一个操作关闭 fd 而第二个操作却没有?我认为垃圾收集器必须删除没有引用的文件对象。
当我重新分配值时,我知道解释器中的“_”var
>>>111
>>>_
111
但描述符保持开放状态。
当我重复
>>>open('file')
n次有2*n个打开的描述符
在第二个示例中,文件句柄由交互式解释器变量保留_
,它允许您访问最后计算的表达式。如果您计算另一个表达式,例如1+1
,您会注意到该文件不再由lsof
一样开放。
正如 Mike Byers 所指出的,这种行为是 CPython 特有的,甚至是文件对象使用的精确环境。要确保无论代码如何执行,文件都会关闭,请使用with
陈述:
with open('file') as fp:
data = fp.read()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)