python - 在生成器中使用 return 语句

标签 python python-3.x

我正在尝试学习Python,阅读《学习Python》一书,并遇到了在生成器中使用return语句的部分,我发现很难理解我的想法它。

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

这是代码示例

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)

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

最佳答案

生成器中的

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

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

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

关于python - 在生成器中使用 return 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169817/

相关文章:

python - 在 VBA 中,如何使用 Shell.Run 而不是 Shell.Exec 来捕获 shell 输出?

python - Pandas - 从行中提取文本

python - 使用 pygame 时如何删除 "Hello from the pygame community"控制台警报?

python - 在 Python 中制作 pi 数字的可视化表示

python-3.x - 如何更改 altair 中 geo_shape 的限制(python vega-lite)

python - 在选定列上创建数据透视表后的附加计算

python - 具有多个嵌套对象的 Django Rest Framework 可写嵌套序列化程序

python - Matplotlib sharex 对具有不同 x 值的数据?

Python打印格式变音右对齐

python - 树莓派与Python