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 :

  1. __iter__() : Cette méthode renvoie l’objet itérateur lui-même.
  2. __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 exception StopIteration.

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 !