在生成器中使用return语句

时间:2017-02-10 22:42:25

标签: python python-3.x

我正在尝试学习python,阅读学习Python这本书,并且遇到了在生成器中使用return语句的部分,我发现很难绕过它。< / p>

它表示在生成器函数中使用return语句时,它将生成一个StopIteration异常,从而有效地结束迭代。如果return语句实际上使函数返回某些内容,则会破坏迭代协议。

这是代码示例

def geometric_progression(a, q):
    k = 0
    while True:
        result = a * q**k
        if result <= 100000:
            yield result
        else:
            return
        k += 1

for n in geometric_progression(2,5):
    print(n)

任何人都可以解释一下,以及如何在任何其他环境中进一步使用它。如果可以的话,提供额外的例子。

1 个答案:

答案 0 :(得分:3)

生成器中的

return只是raise StopIteration的语法糖。在python 3.3(?)+中,您还可以返回一个值(return value == raise StopIteration(value))。

至于你为什么要把它放在那里,显然提出StopIteration意味着发电机将停止产生物品。换句话说,生成器已完成执行 - 就像return表示函数执行结束一样。类似地,任何迭代生成器的东西(例如for循环)都会理解它应该停止尝试从生成器获取值。

添加了return value位以支持使用协同例程IIRC的一些工作流程。这是一个非常先进的功能,但在各种异步上下文中发现了很多用处。