Veamos un ejemplo con yield que podría generar confusión si no estamos acostumbrados a trabajar con generadores.

Qué es yield

Ejemplo con yield

 

Click aquí para una versión accesible de la infografía (apta para lectores electrónicos)
 

Un caso con generadores en Python

Llamando a esta función obtendremos un generador de números pares, desde el 0:

def pares():
    i = 0
    while True:
        yield i
        i += 2

Mediante next(), el generador nos da el siguiente número:

generador = pares()
for _ in range(10):
    print(next(generador))

¿Tal vez podríamos ahorrarnos una variable e invocar a la función directamente como argumento de next()?

for _ in range(10):
    print(next(pares()))

Pero, si hacemos esto, veremos que siempre obtenemos 0…

Cada vez que se llama a pares() se obtiene un nuevo generador, que comenzará por el número 0. Eso es lo que sucede si llamamos a pares() en cada iteración. Es por esto que debemos obtener el generador una única vez y luego usarlo.