Le mot-clé yield en Python

Muhammad Waiz Khan 10 octobre 2023
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

Article connexe - Python Keyword