擅长:python、mysql、java
<p>是的,CPython会的。在</p>
<p>当文件对象的引用计数降至0时,它们将自动关闭。正在清理的本地作用域意味着refcount将下降,如果本地作用域是唯一的引用,则文件对象refcount将下降到0并关闭。在</p>
<p>但是,最好将file对象用作<code>with</code>语句中的上下文管理器,并以这种方式自动关闭它;不要指望CPython的特定垃圾处理实现:</p>
<pre><code>def openAndSleep():
with open("fff", 'w') as f:
print "opened, sleep 10 sec"
time.sleep(10)
print "sleep finish"
</code></pre>
<p>注意,<code>__del__</code>是定制Python类的钩子;file对象是用C实现的,并填充<a href="http://docs.python.org/2/c-api/typeobj.html#PyTypeObject.tp_dealloc" rel="nofollow">^{<cd3>} slot</a>。<a href="http://hg.python.org/cpython/file/0820e8394d96/Objects/fileobject.c#l613" rel="nofollow">^{<cd4>} function</a>关闭file对象。在</p>
<p>如果要使文件对象保持打开状态更长时间,请确保仍有对它的引用。也可以在其他地方存储对它的引用。从函数中返回它并存储返回值,例如,将其设为全局变量,等等</p>