2012-09-05 9 views
53

En this question, tengo una secuencia infinita usando generadores Python. Pero el mismo código no funciona en Python 3 porque parece que no existe la función next(). ¿Cuál es el equivalente para la función next?no hay función next() en un generador de rendimiento en python 3

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()) 
+0

Relacionado: [problemas al utilizar el método __next__ en Python] (https://stackoverflow.com/questions/5982817/problems-using-next-method-in-python) – user2314737

Respuesta

78

En Python 3, utilice next(uptofive) en lugar de uptofive.next().

La función incorporada next() también funciona en Python 2.6 o superior.

29

En Python 3, para hacer que la sintaxis sea más uniforme, el método next() se renombró a __next__(). Puedes usar ese. Esto se explica en PEP 3114.

Se recomienda seguir la solución de Greg y llamar al builtin next() function (que luego trata de encontrar el método __next__() de un objeto).

+1

Particularmente porque la función es portátil entre las versiones 2 y 3 , mientras que los métodos (debido al cambio de nombre) no lo son. – holdenweb

Cuestiones relacionadas