PaliSkill
Python avancé

Leçon 3 / 10 — Chapitre 5: Itérateurs, générateurs et context managers

Le mot-clé yield : une fonction génératrice

Écrire __iter__/__next__ à la main est verbeux pour un cas simple. Une fonction génératrice, contenant au moins un yield, produit le même résultat bien plus simplement : Python génère l'itérateur automatiquement.

def compter(limite):
    actuel = 1
    while actuel <= limite:
        yield actuel
        actuel = actuel + 1

for n in compter(3):
    print(n)

Ce code affiche 1, 2, puis 3 — exactement le même résultat que Compteur à la leçon précédente, avec bien moins de code. yield actuel suspend l'exécution de la fonction à cet endroit précis, renvoie actuel à l'appelant, puis reprend juste après yield au prochain appel — la fonction se souvient de son état (ici, la valeur de actuel) entre deux reprises.

Une fonction contenant yield ne s'exécute pas immédiatement à l'appel : compter(3) renvoie un objet générateur, sans exécuter aucune ligne du corps de la fonction tant que rien ne le parcourt.

generateur = compter(3)
print(next(generateur))
print(next(generateur))

Ce code affiche 1, puis 2 : chaque next() reprend l'exécution jusqu'au yield suivant — le même protocole __next__ vu à la première leçon, mais généré automatiquement par Python.

À vous de jouer : écrivez une fonction génératrice avec yield qui produit les nombres de 1 à une limite donnée, et parcourez-la avec une boucle for.

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 87 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès