【发布时间】:2017-07-04 15:40:29
【问题描述】:
This question as been asked with respect to returning 来自 with 块内部,但是让步怎么样?
如果下次调用该函数,是否会在 yield 上调用块的 __exit__,然后再次调用 __enter__?还是等待生成器退出 with 块(或返回)
举个例子:
def tmp_csv_file():
tmp_path = 'tmp.csv'
with open(tmp_path, 'w+') as csv_file:
yield csv_file # will this close the file?
os.remove(tmp_path)
【问题讨论】:
-
我认为不会 - 生成器保存它们产生的状态,以便它们可以从那个点继续。您没有使用内置的tempfile 有什么原因吗?
-
你不能自己测试一下吗(因为你显然也没有花时间阅读文档)?
-
注意:“with”块被称为上下文管理器。 :)
-
@TemporalWolf 我不知道它的存在,谢谢你的提示!
-
@martineau 绝对可以并且将会有,但是我在 SO 上发帖也是为了让其他人可以访问答案。此外,MSeifert 的回答发现了一些我不会测试的点,所以在这里询问确实得到了回报:)
标签: python