La palabra clave yield en Python

Muhammad Waiz Khan 10 octubre 2023
La palabra clave yield en Python

Este tutorial explicará el propósito y el uso de la palabra clave yield en Python. La palabra clave yield es una declaración de Python utilizada para definir las funciones generadoras en Python. La declaración yield sólo se puede utilizar dentro del cuerpo de la función.

La principal diferencia entre una función generadora y una función regular es que la función generadora contiene una expresión yield en lugar de la declaración return. La declaración yield produce la serie de valores denominada iterador generador como salida. Los nuevos valores del iterador se pueden recuperar usando la función next() o el bucle for.

Cada vez que se llama a la función next() o en cada iteración del bucle for, la declaración yield produce o produce un nuevo valor y guarda el estado de ejecución de la ubicación de la función, es decir, los valores de las variables locales, etc. En cada nueva llamada o iteración de función next(), la instrucción yield se reanuda desde el último estado guardado, a diferencia de la instrucción return que comienza en cada llamada.

Códigos de ejemplo de la palabra clave yield en Python

Como el funcionamiento de la declaración yield es claro, veamos ahora sus usos y códigos de ejemplo. Supongamos que tenemos una gran cantidad de datos y no se pueden cargar de una vez en un objeto iterable, o queremos una forma más eficiente de leer los datos. Podemos crear una función generadora usando la declaración de rendimiento; la función leerá y producirá el nuevo fragmento de datos en cada iteración o llamada de función next().

El siguiente código de ejemplo demuestra cómo usar la declaración yield con el bucle for para crear una función generadora simple en Python. La función de generador my_generator() en el siguiente código de ejemplo producirá el nuevo número de 1 a 100 y funcionará hasta las llamadas de 99.

def my_generator():
    for x in range(1, 100):
        print("new value is generated!")
        yield x

Primero necesitaremos un objeto iterador generador para generar valores usando la función next() o mediante iteración.

gen_iter = my_generator()

Ahora obtengamos los nuevos valores del iterador generador usando la función next(); también podemos usar la función next() como iterator.__next__(), como se muestra en el código de ejemplo a continuación.

val = next(gen_iter)
print("Value =", val)

val = gen_iter.__next__()
print("Value =", val)

Producción :

new value is generated!
Value = 1
new value is generated!
Value = 2

El otro método para obtener nuevos valores es iterar a través del objeto iterador generador usando el bucle for; el siguiente código de ejemplo demuestra cómo iterar a través del objeto iterador generador en Python.

for val in gen_iter:
    print("Value =", val)

El ejemplo de código anterior generará todos los valores 99 del rango especificado en la función del generador.

También podemos crear una función generadora sin el bucle for usando la declaración yield varias veces, como se demuestra en el código de ejemplo a continuación.

def my_generator():

    x = 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x

Ahora, usemos nuestra nueva función generadora para generar todos los valores usando el bucle for.

gen_iter = my_generator()
for val in gen_iter:
    print("Value =", val)

Producción :

new value is generated!
Value = 1
new value is generated!
Value = 2
new value is generated!
Value = 3

Artículo relacionado - Python Keyword