【发布时间】:2021-11-08 07:01:27
【问题描述】:
假设我们有一个像这样的简单生成器:
def generator():
with open('example.txt', 'r') as f:
yield f.readline()
yield f.readline()
并像这样使用它来获取单个元素/行:
line = next(generator())
临时生成器对象被垃圾回收后上下文管理器是否关闭?
【问题讨论】:
-
@MadPhysicist,...为什么不会呢?如果生成器上没有更多句柄,那么文件上的引用计数如何高于零?即使没有使用上下文管理器,我也希望它会被关闭。
-
@MadPhysicist 所以答案是否定的?为什么这么爽快?我认为这是一个有效的问题
-
...也就是说,我对这个问题的唯一问题是“文件是否关闭?”没有严格回答“上下文管理器是否已退出?” -- 即使没有调用上下文管理器的
__exit__,文件也可以关闭。 (虽然我确实希望它会被调用,而且它当然很容易测试)。 -
@CharlesDuffy 有效点。显然,该文件只应该是上下文管理器的占位符。我将编辑问题。
标签: python generator contextmanager