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