def gen():
try:
yield 1
finally:
print("finally")
def main():
print(next(gen()))
这段代码打印
finally
1
我不明白这里的处决顺序。为什么“最后”要印在"1“之前?
发布于 2022-07-19 09:14:34
您可以将行print(next(gen()))
重写为
g = gen() # temporary variable
val = next(g)
# # the generator is now deleted because the variable g is not referenced anymore
del(g) # that calls the "finally" block `print("finally")`
print(val)
如果将生成器赋值给一个变量,但不要删除它,那么它将在main函数的末尾被回收。这可能就是你所期望的。
如果您通过next()
使用生成器,则应该将它分配给一个变量,否则将无法使用带有更多项目的生成器,因为它将在第一个项目之后被回收!
发布于 2022-07-19 08:48:46
之所以将"finally“打印在"1”之前,是因为Python所做的第一件事是解析next(gen())
,这涉及返回1和打印“最终”。一旦完成了next(gen())
的执行,它最终打印出来,值为1。现在,它可以解析print(1)
,它打印"1“。
发布于 2022-07-19 08:50:46
下面是一个正在发生的例子
你得先看看里面的东西,然后再看看外壳和外壳等等。
https://stackoverflow.com/questions/73033854
复制相似问题