¿Cómo obtener un valor a la vez de una función generadora en Python?


113

Pregunta muy básica: ¿cómo obtener un valor de un generador en Python?

Hasta ahora he descubierto que puedo conseguir uno escribiendo gen.next(). Solo quiero asegurarme de que esta sea la forma correcta.

Respuestas:



66

En Python <= 2.5, use gen.next(). Esto funcionará para todas las versiones de Python 2.x, pero no para Python 3.x

En Python> = 2.6, use next(gen). Esta es una función incorporada y es más clara. También funcionará en Python 3.

Ambos terminan llamando a una función con un nombre especial next(), que puede anularse mediante subclases. En Python 3, sin embargo, se ha cambiado el nombre de esta función para __next__()que sea coherente con otras funciones especiales.


16

Usar (para python 3)

next(generator)

Aquí hay un ejemplo

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

debería imprimir

0
1


2

Para obtener el valor asociado con un objeto generador en python 3 y superior, use next(<your generator object>). las llamadas posteriores a next () producen valores de objeto sucesivos en la cola.


1

En Python 3 no tiene gen.next(), pero aún puede usar next(gen). Un poco extraño si me preguntas, pero así es.


1
No es tan extraño. Se supone que Python 3 rompe cosas y solo permite el mejor código más claro. No tener compatibilidad con versiones anteriores es el punto de algunos cambios importantes.
Tatarizar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.