Я пытаюсь изучить python, прочитав книгу Learning 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', что является своего рода надуманным, поскольку вы могли бы сделать while-loop 'while <= 100000' для достижения того же эффект (с некоторым соответствующим начальным значением для «результата»). Честно говоря, я не думаю, что он используется очень много, но бывают случаи, когда вы хотите немедленно прекратить итерацию, где это может пригодиться. –
Возможный дубликат [Возврат в генераторе вместе с доходностью в Python 3.3] (http://stackoverflow.com/questions/16780002/return-in-generator-together-with-yield-in-python-3-3) –
@ Chris_Rands - FWIW, это _slightly_ отличается от этого вопроса. Это специально задает вопрос о том, что означает «возвращаемое значение», в то время как это также спрашивает о голом возврате (и поэтому применимо также к python2.x). Я согласен с этим: они похожи друг на друга, и я мог понять, закончилось ли это закрытием как обман :-) – mgilson