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 next
funció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é noyield
devuelve 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.for
llama 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