请问下面两种方式的代码,输出结果顺序为什么不一样?
code1输出为:
end
65
而code2输出为:
65
end
code 1:
def af():
a=65
try:
yield a
finally:
print('end')
print(af().next())
code 2:
def af():
a=65
try:
yield a
finally:
print('end')
g=af()
print(g.next())
说说我的理解。
如果不实例化一个生成器,直接调用af().__next__方法后,生成器会被“关闭”,“关闭”前会执行finally。
实例化生成器g,调用g.__next__()方法后,g并不会“关闭”,自然也就暂时不会执行finally,直到stopiteration或主程序结束才执行finally。