En esta pregunta , tengo una secuencia interminable usando generadores de Python. Pero el mismo código no funciona en Python 3 porque parece que no hay next()función. ¿Cuál es el equivalente de la nextfunción?
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
Max
fuente
fuente

for i in range(n), ¿por qué noyielddevuelve simplemente "1"? En cambio, después del primer valor en el rango, el código continúa y produce el rango completo, que para mí parece ser que el rendimiento se llama varias veces a la vez. Me cuesta un poco entender los matices.forllama al objeto generador creado a partir de su función, ejecutará el código en su función desde el principio hasta que llegueyield, luego devolverá el primer valor del ciclo. Luego, cada llamada ejecutará el ciclo que ha escrito en la función una vez más y devolverá el siguiente valor, hasta que no haya ningún valor para devolver. (tomado de este tutorial )Respuestas:
En Python 3, use en
next(uptofive)lugar deuptofive.next().La
next()función incorporada también funciona en Python 2.6 o superior.fuente
En Python 3, para que la sintaxis sea más coherente,
next()se cambió el nombre del método a__next__(). Podrías usar ese. Esto se explica en PEP 3114 .Se recomienda seguir la solución de Greg y llamar a la función incorporada
next()(que luego intenta encontrar el__next__()método de un objeto ).fuente