Le mot-clé yield en Python
Ce tutoriel expliquera le but et l’utilisation du mot-clé yield
en Python. Le mot-clé yield
est une instruction Python utilisée pour définir les fonctions génératrices en Python. L’instruction yield
ne peut être utilisée que dans le corps de la fonction.
La principale différence entre une fonction génératrice et une fonction régulière est que la fonction génératrice contient une expression yield
au lieu de l’instruction return
. L’instruction yield
produit la série de valeurs appelées l’itérateur du générateur en sortie. Les nouvelles valeurs de l’itérateur peuvent être récupérées à l’aide de la fonction next()
ou de la boucle for
.
A chaque fois que la fonction next()
est appelée ou à chaque itération de la boucle for
, l’instruction yield
donne ou produit une nouvelle valeur et enregistre l’état d’exécution de localisation de la fonction c’est-à-dire les valeurs des variables locales, etc. A chaque nouvel appel ou itération de la fonction next()
, l’instruction yield
reprend à partir du dernier état sauvegardé, contrairement à l’instruction return
qui commence à chaque appel.
Exemples de codes du mot-clé yield
en Python
Le fonctionnement de l’énoncé yield
étant clair, examinons maintenant ses utilisations et exemples de codes. Supposons que nous ayons une grande quantité de données et qu’elles ne puissent pas être chargées en même temps dans un objet itérable, ou que nous souhaitions une manière plus efficace de lire les données. Nous pouvons créer une fonction de générateur en utilisant l’instruction yield; la fonction lira et produira le nouveau bloc de données à chaque itération ou appel de fonction next()
.
L’exemple de code ci-dessous montre comment utiliser l’instruction yield
avec la boucle for
pour créer une fonction génératrice simple en Python. La fonction de générateur my_generator()
dans l’exemple de code ci-dessous donnera le nouveau nombre de 1
à 100
et fonctionnera jusqu’à 99
appels.
def my_generator():
for x in range(1, 100):
print("new value is generated!")
yield x
Nous aurons d’abord besoin d’un objet itérateur générateur pour générer des valeurs en utilisant soit la fonction next()
soit par itération.
gen_iter = my_generator()
Maintenant, récupérons les nouvelles valeurs de l’itérateur du générateur en utilisant la fonction next()
; nous pouvons également utiliser la fonction next()
comme iterator.__next__()
, comme indiqué dans l’exemple de code ci-dessous.
val = next(gen_iter)
print("Value =", val)
val = gen_iter.__next__()
print("Value =", val)
Production:
new value is generated!
Value = 1
new value is generated!
Value = 2
L’autre méthode pour obtenir de nouvelles valeurs est de parcourir l’objet itérateur du générateur en utilisant la boucle for
; l’exemple de code ci-dessous montre comment parcourir l’objet itérateur du générateur en Python.
for val in gen_iter:
print("Value =", val)
L’exemple de code ci-dessus générera toutes les valeurs 99
de la plage spécifiée dans la fonction générateur.
Nous pouvons également créer une fonction de générateur sans la boucle for
en utilisant l’instruction yield
plusieurs fois, comme démontré dans l’exemple de code ci-dessous.
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
Maintenant, utilisons notre nouvelle fonction de générateur pour générer toutes les valeurs en utilisant la boucle for
.
gen_iter = my_generator()
for val in gen_iter:
print("Value =", val)
Production:
new value is generated!
Value = 1
new value is generated!
Value = 2
new value is generated!
Value = 3