我正在努力学习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)
有谁能解释一下,以及如何在其他场合进一步使用它吗。如果可以,请提供额外的例子。在
生成器中的
return
只是raise StopIteration
的语法糖。在python3.3(?)+,也可以返回一个值(return value
==raise StopIteration(value)
)。在至于为什么要把它放在那里,显然,引发一个
StopIteration
意味着生成器将停止生成项。换句话说,生成器执行完毕,就像return
表示函数执行结束一样。类似地,在生成器上迭代的任何东西(例如for
循环)都将理解它应该停止尝试从生成器获取值。在添加了
return value
位,以支持使用co例程IIRC的某些工作流。这是一个非常高级的特性,但是在各种异步上下文中都有很多用处。在相关问题 更多 >
编程相关推荐