2011-03-08 9 views
30

Bueno, estaba usando el método itertools.cycle().next() con Python 2.6.6, pero ahora que actualicé a 3.2 noté que el objeto itertools.cycle() no tiene el método next().itertools.cycle(). Next()?

Lo usé para hacer un ciclo de una cadena en el método spin() de una clase Spinner. Así que si la tupla ciclo ('|', '/', '-', '\\', '|', '/', '-'), que va a imprimir: |, /, -, \, |, /, -, |, / y así sucesivamente ...

He buscado en las notas de la versión 3.0 de Python , 3.1 y 3.2 y no notó ningún cambio en esto. Cuando esto ha cambiado? ¿Hay alguna alternativa simple para lograr la misma funcionalidad que antes?

Gracias de antemano.

+1

+1 para este divertido caso de uso de 'ciclo' :) –

Respuesta

42

iter.next() se eliminó en python 3. Use next(iter) en su lugar. Por lo tanto, en su ejemplo cambie itertools.cycle().next() a next(itertools.cycle())

Hay un good example here junto con varias otras conexiones a python 3 consejos. También compara varios otros modismos next() en Python 2.x vs Python 3.x

+2

Respondió casi lo mismo que @Sven (bueno, lo sé) no podría ser diferente), pero su enlace guardó su respuesta. No sabía el http: //diveintopython3.org/... ¡Marcado como favorito! Gracias por la respuesta y el enlace. :) –

+0

Sí, ambos respondimos más o menos al mismo tiempo. Me alegro de que hayas encontrado el enlace útil, he encontrado que es una buena referencia. – d0ugal

+0

¿Por qué se eliminó 'iter.next()'? –

14

En Python 3.x, los iteradores ya no tienen it.next(). use next(it), que también funciona en Python 2.6 o superior. Internamente, esto llamará al it.next() en Python 2.xy it.__next__() en Python 3.x.

Cuestiones relacionadas