我試圖學習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