PaliSkill
Python avancé

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

À faire

Quelle 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

À faire

Que 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

Quitter le module