я писал в интерпретатор Python сегодня:Почему этот код дает генератор?
>>> def test():
... for c in ['a', 'b', 'c', 'd']: yield c
...
>>> a = test()
>>> a
<generator object test at 0x2556a00>
>>> a.next()
'a'
>>> a.next()
'b'
Это было удивительно для меня. Должно ли test
возвращать (или давать) один из элементов моего списка, а не генератор, который их дает?
Вторая функция, которая использует «возвращение» ведет себя, как и ожидалось:
>>> def test2():
... for i in ['a', 'b', 'c', 'd']: return i
...
>>> b = test2()
>>> b
'a'
>>> b
'a'
Почему это так? Где в документации описывается это поведение?
* Не следует проверять возврат (или выход) одного из элементов моего списка, а не генератора, который их дает? *. Нет, потому что тогда вы никогда не сможете получить еще один * независимый генератор, уступающий предметы отдельно. –
Документация: https://docs.python.org/2/reference/expressions.html#yield-expressions –
Возможно, вы захотите посмотреть на этот знаменитый вопрос, также спрашивающий о выходе: http://stackoverflow.com/questions/231767/what-do-the-yield-keyword-do-in-python – SmCaterpillar