Itérateur, itérable, conteneur, générateur, en Python
par Vincent Poulailleau - 3 minutes de lecture - 507 mots
Je vois régulièrement des confusions entre les termes itérateurs, itérables, conteneurs, générateurs. Voici le schéma à retenir :
Commençons par la notion d’itérable. Un itérable est quelque chose que l’on peut parcourir avec une boucle for
:
|
|
Un conteneur est quelque chose qui contient des valeurs (une liste, un dictionnaire, un set…). Un conteneur est généralement itérable (en tout cas, les listes, dictionnaires et sets le sont).
Les listes en compréhension, les sets en compréhension, les dictionnaires en compréhension sont des moyens de créer des listes, sets et dictionnaires facilement et rapidement.
|
|
Appeler iter
sur un itérable renvoie un itérateur :
|
|
Un itérateur est quelque chose qui permet d’itérer sur un itérable, c’est à dire de parcourir séquentiellement l’itérable (une boucle for
utilise un itérateur pour parcourir les itérables).
Pour avoir accès au prochain élément fourni par l’itérateur, il faut appeler la fonction next
.
|
|
Ce qui affichera :
|
|
Comme vous pouvez le voir, quand il n’y a plus d’élément à parcourir, next
lève une exception StopIteration
.
Vous pouvez créez vos itérateurs et itérables maisons, en créant des classes qui ont les méthodes __iter__
et __next__
. Lisez https://docs.python.org/fr/3/reference/datamodel.html qui contient plein d’informations utiles.
Un générateur génère des valeurs à la volée. Un générateur est itérable. Il existe deux types de générateurs : les fonctions génératrices et les expressions génératrices.
|
|
Cela affichera :
|
|
Voilà pour cet article qui ne rentre pas dans les détails. Je vous conseille comme lecture pour les anglophones :