我正在尝试学习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/