Python, exemple d’utilisation de yield

Partage

Mise à jour 2026. Cet article a été publié en 2008 et son exemple original utilisait Python 2. Le principe de yield n’a pas changé, mais le code présenté ci-dessous a été modernisé pour Python 3.

Python, exemple d'utilisation de yield

Les statistiques de fréquentation d’un blog peuvent être surprenantes. Ainsi vous êtes nombreux à arriver ici en faisant une recherche sur la fonction yield de Python.

Pour comprendre yield, il faut d’abord savoir ce qu’est un générateur.

Une fonction qui contient le mot-clé yield est une fonction génératrice. Lorsqu’on l’appelle, elle ne calcule pas immédiatement toutes les valeurs : elle crée un objet générateur capable de les produire une à une, au fur et à mesure qu’on les demande.

Lorsqu’un yield est rencontré, la fonction renvoie une valeur puis suspend son exécution. Son état est conservé : au prochain appel de next(), elle reprend exactement là où elle s’était arrêtée.

L’ambiguïté qu’il faut signaler est que dans le langage courant, on confond souvent la fonction et l’objet généré.

Dans l’exemple suivant, la fonction CouleurIterateur (), qui émule un feu tricolore, renvoie à chaque fois que l’on rencontre YIELD, successivement :
Vert, Orange et Rouge

def couleur_iterateur():
    while True:
        for couleur in ("Vert", "Orange", "Rouge"):
            yield couleur


couleurs = couleur_iterateur()

for _ in range(10):
    print(next(couleurs))

Dans le corps du programme l’instruction couleur=CouleurIterateur() crée un objet itérateur qui bénéficie, et c’est là l’intérêt de yield, de la propriété next():

La première fois que le programme rencontre couleur.next(), il va exécuter la fonction CouleurIterateur () jusqu’à rencontrer yield,, il va à ce moment-là suspendre l’exécution de la fonction et retourner la valeur de i (Soit : Vert)

La seconde fois, et les fois suivantes où le programme rencontrera couleur.next() (Il y a dix itérations dans cet exemple) , c’est pareil, il exécutera le code jusqu’à YIELD, suspendra l’exécution, et renverra la valeur de i.

yield

Pourquoi utiliser yield plutôt qu’une liste ?

L’intérêt d’un générateur apparaît surtout lorsque toutes les valeurs n’ont pas besoin d’être calculées ou conservées en mémoire en même temps. Elles peuvent être produites au fur et à mesure des besoins.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *