4

可能重复:
在 Python 文件对象上使用迭代器时是否需要 close()

for line in open("processes.txt").readlines():
    doSomethingWith(line)

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

4

2 回答 2

7

当相应的对象被释放时,文件将关闭。您提供的样本取决于此;没有对该对象的引用,因此将删除该对象并关闭该文件。

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

于 2012-12-06T06:31:19.377 回答
5

AFAIK 他们没有。为了自动关闭,您需要使用上下文管理器,例如with

尽管对象本身可能会被垃圾回收回收并关闭,但垃圾回收发生的时间并没有确定的时间。

with open("processes.txt") as openfile:
    <do stuff>
于 2012-12-06T05:45:32.170 回答