Comment construire un itérateur
de base en Python
En Python, les itérateurs sont des outils puissants qui vous permettent de parcourir une collection de valeurs sans avoir besoin de travailler directement avec la structure de données sous-jacente. Que vous traitiez des listes, des ensembles ou même des objets personnalisés, comprendre comment créer votre propre itérateur peut être très bénéfique.
Dans cet article, nous allons discuter de la manière de construire un itérateur de base en utilisant une classe exemple appelée Example
, puis nous explorerons une implémentation plus simple utilisant un générateur.
Qu’est-ce qu’un Itérateur ?
Un itérateur est un objet qui se conforme au protocole d’itération. Cela signifie qu’il doit fournir deux méthodes essentielles :
__iter__()
: Cette méthode renvoie l’objet itérateur lui-même.__next__()
: Cette méthode renvoie la prochaine valeur de la collection. Lorsque qu’il n’y a plus d’éléments à retourner, elle lève une exceptionStopIteration
.
Ces méthodes facilitent l’itération sur les éléments dans une boucle.
Créer un Itérateur de Base
Décomposons la manière de créer un itérateur étape par étape.
Étape 1 : Définir la Classe
Nous allons commencer par définir une classe appelée Example
. Cette classe prendra une liste de valeurs et les exposera à travers l’itérateur.
class Example:
def __init__(self, values):
self.values = values
Étape 2 : Implémenter les Méthodes de l’Itérateur
Maintenant, nous allons implémenter les méthodes __iter__
et __next__
dans la classe Example
.
class Example:
def __init__(self, values):
self.values = values
def __iter__(self):
self.index = 0 # Initialiser l'index
return self
def __next__(self):
if self.index < len(self.values):
result = self.values[self.index]
self.index += 1 # Passer à l'index suivant
return result
else:
raise StopIteration # Plus de valeurs à retourner
Étape 3 : Utiliser l’Itérateur
Vous pouvez maintenant créer une instance de Example
et itérer à travers ses valeurs comme ceci :
e = Example([1, 2, 3])
for value in e:
print("L'objet exemple contient", value)
Ce code produira la sortie suivante :
L'objet exemple contient 1
L'objet exemple contient 2
L'objet exemple contient 3
Construire un Itérateur Compteur
Pour illustrer davantage le concept, construisons un simple itérateur Counter
qui compte d’un nombre bas à un nombre haut.
Classe Counter
Voici comment vous pouvez construire l’itérateur Counter
:
class Counter:
def __init__(self, low, high):
self.current = low - 1
self.high = high
def __iter__(self):
return self
def __next__(self):
self.current += 1
if self.current < self.high:
return self.current
raise StopIteration
Utiliser le Compteur
Vous pouvez utiliser la classe Counter
comme ceci :
for c in Counter(3, 9):
print(c)
Cela imprimera :
3
4
5
6
7
8
Une Approche Alternative : Utiliser des Générateurs
Bien que les classes d’itérateur ci-dessus soient utiles, mettre en œuvre un générateur peut être encore plus simple. Les générateurs gèrent automatiquement l’état et le protocole d’itération pour vous.
Voici comment vous pouvez créer un compteur sous forme de générateur :
def counter(low, high):
current = low
while current < high:
yield current
current += 1
for c in counter(3, 9):
print(c)
La sortie reste la même, mais l’approche du générateur rend votre code plus propre et plus facile à entretenir.
Conclusion
Créer des itérateurs en Python vous permet de définir votre propre comportement d’itération et de manipuler la manière dont les objets exposent leurs valeurs. En mettant en œuvre les méthodes __iter__()
et __next__()
, vous pouvez fournir une expérience d’itération personnalisée. De plus, l’utilisation des générateurs simplifie le processus, vous faisant gagner du temps et réduisant la complexité.
Pour en savoir plus sur ce sujet, n’hésitez pas à consulter l’article de David Mertz sur les Itérateurs et les Générateurs Simples.
Maintenant que vous avez une compréhension de base de la manière de créer des itérateurs en Python, vous pouvez commencer à appliquer ces concepts dans vos propres projets !