我试图学习Python,通过学习Python书阅读,并遇到在生成器中使用return
语句的部分,我发现很难将它包裹在它周围。在生成器中使用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)
谁能请解释它,以及如何在其他任何情况下继续使用它。提供额外的例子,如果你可以。
只要把它看成是尽早停止迭代。在这种情况下,条件'result <= 100000'使发生器停止产生大于'100000'的结果,这是一种人为的做法,因为你可以在<= 100000'时使while循环达到相同的效果效果(对'result'有一些适当的初始值)。老实说,我不认为它使用得太多,但有些情况下,你想立即停止迭代,可能会派上用场。 –
[在Python 3.3中与yield一起返回生成器的可能的副本](http://stackoverflow.com/questions/16780002/return-in-generator-together-with-yield-in-python-3-3) –
@ Chris_Rands - FWIW,这与这个问题略有不同。这就是具体问什么“返回值”的意思,而这是问裸回归(因此也适用于python2.x)。我同意 - 他们很相似,我可以理解,如果这样做最终会被封闭为: - ) – mgilson