Leçon 1 / 10 — Chapitre 5: Itérateurs, générateurs et context managers
Le protocole d'itération : __iter__ et __next__
Une boucle for sur une liste fonctionne grâce à un mécanisme précis : Python appelle __iter__ sur la liste pour obtenir un itérateur, puis appelle __next__ sur cet itérateur, encore et encore, jusqu'à ce qu'il n'y ait plus rien.
nombres = [10, 20, 30]
iterateur = iter(nombres)
print(next(iterateur))
print(next(iterateur))
print(next(iterateur))
Ce code affiche 10, 20, puis 30. iter(nombres) appelle __iter__ sur la liste et renvoie un itérateur ; next(iterateur) appelle __next__ dessus, qui renvoie une valeur à la fois, en avançant à chaque appel.
Un quatrième appel à next(iterateur) lèverait une StopIteration : c'est précisément cette erreur qu'une boucle for intercepte automatiquement en interne, pour savoir quand s'arrêter — sans qu'on la voie jamais directement dans du code normal.
for n in nombres:
print(n)
Cette boucle for fait exactement la même chose que le code du dessus, mais Python gère iter(), next() et l'arrêt sur StopIteration automatiquement, en coulisses.
À vous de jouer : avec iter() et next() appelés manuellement sur une liste, affichez ses trois premiers éléments un par un.
À vous de jouer
À faireQuelle erreur Python lève-t-il quand on appelle next() sur un iterateur déjà epuise ?
Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.
À vous de jouer
À faireQue fait iter(nombres) sur une liste nombres ?
Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.
💡 une courte réponse