Esta es una de esas herramientas que aprendemos cuando queremos dar un pasito más allá y mejorar nuestro código Python. ¿Conocías “yield”? ¿Lo has usado?

¿Qué es yield en Python?

 

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

Python: ¿qué es “yield”?

yield: palabra clave para crear un generador.

generador: función que retorna un iterador.

iterador: objeto que puede iterarse, llamando a next() para que retorne el siguiente elemento de la secuencia.

yield funciona suspendiendo la ejecución de la función para retornar un valor. La siguiente vez que se llama a la misma función, la ejecución continúa desde donde se había dejado.

EJEMPLOS:

Sin yield:

def fibonacci(cantidad):
    a, b = 0, 1
    for i in range(cantidad):
        print(a)
        a, b = b, a + b

fibonacci(10)

Con yield:

def fibonacci(cantidad):
    a, b = 0, 1
    for i in range(cantidad):
        yield a
        a, b = b, a + b

for i in fibonacci(10):
    print(i)

yield es útil para evitar cargar en memoria grandes cantidades de datos que se deban iterar.

def leer_archivo(nombre):
    with open(nombre, 'r') as a:
        for line in a:
            yield line

for linea in leer_archivo('datos.txt'):
    print(linea)