itertools.cycle (). Следующий ()? - PullRequest
36 голосов
/ 08 марта 2011

Ну, я использовал itertools.cycle().next() метод с Python 2.6.6, но теперь, когда я обновился до 3.2, я заметил, что itertools.cycle() объект не имеет метода next().

Я использовал его для циклическогострока в методе spin() класса Spinner.Поэтому, если мы циклически повторяем кортеж ('|', '/', '-', '\\', '|', '/', '-'), он напечатает: |, /, -, \, |, /, -, |, /и так далее ...

Я искал примечания к выпуску Python 3.0, 3.1 и 3.2 и не заметил каких-либо изменений в этом.Когда это изменилось?Есть ли какая-нибудь простая альтернатива для достижения той же функциональности, что и раньше?

Заранее спасибо.

Ответы [ 2 ]

57 голосов
/ 08 марта 2011

iter.next() был удален в Python 3. Вместо этого используйте next(iter).Так что в вашем примере измените itertools.cycle().next() на next(itertools.cycle())

Здесь есть хороший пример вместе с различными другими портированиями на советы по Python 3.Он также сравнивает различные другие next() идиомы в python 2.x против python 3.x

17 голосов
/ 08 марта 2011

В Python 3.x итераторы больше не имеют it.next().используйте next(it) вместо этого, что также работает в Python 2.6 или выше.Внутри это вызовет it.next() в Python 2.x и it.__next__() в Python 3.x.

...