Python 如果我没有';你不把它们分配给一个变量吗?

Python 如果我没有';你不把它们分配给一个变量吗?,python,file-io,scope,Python,File Io,Scope,可能重复: 以该代码为例。没有可调用close()的内容。那么它会自动关闭吗?恐怕不会。要实现自动关闭,您需要使用上下文管理器,例如带的 虽然对象本身可以通过垃圾收集回收并关闭,但垃圾收集发生的时间并不确定 with open("processes.txt") as openfile: <do stuff> 打开(“processs.txt”)作为openfile: 解除分配相应对象时,文件将关闭。你提供的样品取决于此;没有对该对象的引用,因此将删除该对象并关闭该文件 需

可能重复:


以该代码为例。没有可调用close()的内容。那么它会自动关闭吗?

恐怕不会。要实现自动关闭,您需要使用上下文管理器,例如带的

虽然对象本身可以通过垃圾收集回收并关闭,但垃圾收集发生的时间并不确定

with open("processes.txt") as openfile:
    <do stuff>
打开(“processs.txt”)作为openfile:

解除分配相应对象时,文件将关闭。你提供的样品取决于此;没有对该对象的引用,因此将删除该对象并关闭该文件


需要注意的重要一点是,对于何时移除该对象,没有任何保证。使用CPython,可以将引用计数作为内存管理的基础,因此您希望文件立即关闭。例如,在Jython中,垃圾收集器不能保证在任何特定时间(甚至根本不能)运行,因此您不应该指望文件被关闭,而应该手动关闭文件,或者(更好)使用
with
语句。

如果您从未关闭它,它在内存中保持打开状态。它不会自动关闭。那么这是一个不可取的代码段吗?我的印象是格式很普通。除非我在后面加上close(“processs.txt”)。。。?当然……如果你关闭阅读器,这就可以了。我建议使用前面提到的Snakes:with()->这将保证在完成文件所需操作时关闭读取器。我不明白。如果我们没有对file对象的引用,并且我们已经完成了从中读取行的工作-我的意思是,我们不再在
范围内,那么python的垃圾收集器必须清理它,对吗?还是不?
with open("processes.txt") as openfile:
    <do stuff>