В этом вопросе у меня бесконечная последовательность с использованием генераторов Python. Но тот же код не работает в Python 3, потому что кажется, что нет next()
функции. Что эквивалентно next
функции?
def updown(n):
while True:
for i in range(n):
yield i
for i in range(n - 2, 0, -1):
yield i
uptofive = updown(6)
for i in range(20):
print(uptofive.next())
python
python-3.x
Максимум
источник
источник
for i in range(n)
, почему в первом случаеyield
просто не возвращается «1»? Вместо этого, после первого значения в диапазоне, код продолжается и дает весь диапазон, который, как мне кажется, заключается в том, что yield вызывается несколько раз одновременно. У меня небольшие проблемы с пониманием нюанса.for
вызывается объект-генератор, созданный из вашей функции, он запускает код в вашей функции с самого начала до тех пор, пока не попадет в негоyield
, а затем вернет первое значение цикла. Затем каждый другой вызов будет запускать цикл, который вы написали в функции, еще раз и возвращать следующее значение, пока не будет возвращаемого значения. (взято из этого урока )Ответы:
В Python 3 используйте
next(uptofive)
вместоuptofive.next()
.Встроенная
next()
функция также работает в Python 2.6 или выше.источник
В Python 3 для большей согласованности синтаксиса
next()
метод был переименован в__next__()
. Вы могли бы использовать это. Это объясняется в PEP 3114 .Рекомендуется следовать
next()
решению Грега и вызывать встроенную функцию (которая затем пытается найти__next__()
метод объекта ).источник