我有一个名为x的函数,它产生这样的生成器:
a = 5
def x():
global a
if a == 3:
raise Exception("Stop")
a = a - 1
yield a
然后在python shell中我这样调用该函数:
>>> print x().next()
>>> 4
>>> print x().next()
>>> 3
>>> print x().next()
>>> <python-input-112-f3c02bba26c8> in x()
2 global a
3 if a == 3:
----> 4 raise Exception
5 a = a - 1
6 yield a
Exception:
但是,当我调用该函数并将其分配给变量时,它的行为会有所不同:
>>> a = 5
>>> b = x()
>>> print b.next()
>>> 4
>>> print b.next()
>>> ----> 1 b.next()
StopIteration:
这怎么可能呢?它不应该打印出3并在下一次迭代中引发 StopIteration 吗?
PS:我知道当我第一次调用该函数时,主体没有运行,只是产生了一个生成器。我不明白的一点是,如果我调用并将其分配给变量会发生什么变化?