Python - Generator function

Funciones generadoras en Python

Python generator function

🌟 Un generador en Python es una función que utiliza la palabra clave “yield” para producir una secuencia de valores que pueden ser iterados. En lugar de devolver un valor único como lo haría una función normal, un generador devuelve una especie de iterador que se utiliza con la función next().

Una generator function retorna un lazy iterator que tiene su propio estado. Cada vez que se llama a next() de ese iterador se ejecuta el código de la función generador hasta yield. Y next() devuelve entonces el valor pasado por yield.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def pares(n):
    i = 0
    n = n if n < 10 else 10
    while i < n:
        yield i * 2
        i += 1

top = 100   
g = pares(top)

print(top)
for i in range(15):
  print(next(g))

En este ejemplo la variable g recibe un generador de pares hasta 100. Cada llamada a next(g) ejecuta el código de pares() hasta la línea 5. Devolviendo el valor de i * 2. Por lo tanto la línea 11 imprime 0 y la 13 imprime 2, 4, 6, 8, etc. El iterador en g mantiene el estado (es decir el valor de i).

Si continuamos llamando next(g) obtendremos todos los pares hasta el 98 y en la siguiente llamada recibiremos None. Cada llamada a pares() crea un iterador independiente con si límite n y su estado de i.