在生成器中使用return语句

2024-06-16 09:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习python,阅读了《学习python》一书,偶然遇到了在生成器中使用return语句的部分,我发现很难把它放在脑后。在

它说,当在生成器函数中使用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)

有谁能解释一下,以及如何在其他场合进一步使用它吗。如果可以,请提供额外的例子。在


Tags: 函数代码true协议示例内容returnif
1条回答
网友
1楼 · 发布于 2024-06-16 09:35:03

生成器中的return只是raise StopIteration的语法糖。在python3.3(?)+,也可以返回一个值(return value==raise StopIteration(value))。在

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

添加了return value位,以支持使用co例程IIRC的某些工作流。这是一个非常高级的特性,但是在各种异步上下文中都有很多用处。在

相关问题 更多 >