我正在尝试学习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)
任何人都可以解释一下,以及如何在任何其他环境中进一步使用它。如果可以的话,提供额外的例子。
答案 0 :(得分:3)
return
只是raise StopIteration
的语法糖。在python 3.3(?)+中,您还可以返回一个值(return value
== raise StopIteration(value)
)。
至于你为什么要把它放在那里,显然提出StopIteration
意味着发电机将停止产生物品。换句话说,生成器已完成执行 - 就像return
表示函数执行结束一样。类似地,任何迭代生成器的东西(例如for
循环)都会理解它应该停止尝试从生成器获取值。
添加了return value
位以支持使用协同例程IIRC的一些工作流程。这是一个非常先进的功能,但在各种异步上下文中发现了很多用处。