yield语句如何在python中工作?

时间:2019-07-15 14:57:44

标签: python generator

G'day小伙子们,所以我开始学习一些python,并试图理解为什么会发生以下情况:

def g():
    for i in [1,2]:
        yield i
    print('a')

x=g()
next(x) #output=1
next(x) #output=2
next(x) #output='a', StopIteration exception thrown

在最后一个next(x)调用中,为什么在StopIteration异常之前打印“ a”?我希望因为for循环已经结束,它将引发StopIteration异常,并且'a'没有机会被打印出来。是否只是设计了生成器函数,以便在生成StopIteration异常的迭代中,代码继续执行到函数的末尾,此时StopIteration异常会在末尾抛出?我只是想检查这种情况,我确实没有错过任何东西!

编辑:我认为将此问题标记为重复项有点不公平。是的,关于良率有很多详细的答案,我本人正在阅读一本关于python的1500页书,但是当您脑海中有一个错误的概念时,如果没有人指出您的概念错误的地方,可能很难把头放在解释周围。 现在我有了正确的答案,我可以看到问题出在,因为我认为在for循环用完时会抛出StopIteration异常。我现在意识到,在没有进一步的产量期望时,就会抛出该错误。 感谢所有答复,他们帮助我消除了想法。

0 个答案:

没有答案