Maison >développement back-end >Tutoriel Python >Comment les méthodes `__iter__` et `__next__` de Python permettent-elles la création d'itérateurs ?

Comment les méthodes `__iter__` et `__next__` de Python permettent-elles la création d'itérateurs ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-02 19:19:43907parcourir

How Do Python's `__iter__` and `__next__` Methods Enable Iterator Creation?

Création d'itérateurs en Python

Les itérateurs Python sont des objets qui adhèrent au protocole itérateur, comportant les méthodes __iter__() et __next__().

iter Méthode :

La méthode __iter__() renvoie l'objet itérateur, automatiquement invoqué au début des boucles.

next Méthode :

La méthode __next__() récupère la valeur suivante et est implicitement appelée lors des incréments de boucle. Il déclenche une exception StopIteration lorsqu'aucune valeur n'est disponible, qui est détectée par les constructions de boucle et utilisée pour arrêter l'itération.

Par exemple, considérons la classe de compteur simpliste suivante :

class Counter:
    def __init__(self, low, high):
        self.current = low - 1
        self.high = high

    def __iter__(self):
        return self

    def __next__(self): # Python 2: def next(self)
        self.current += 1
        if self.current < self.high:
            return self.current
        raise StopIteration

Quand en utilisant le compteur :

for c in Counter(3, 9):
    print(c)

Le résultat sera :

3
4
5
6
7
8

Alternativement, les générateurs offrent une approche plus simple de la création d'itérateurs :

def counter(low, high):
    current = low
    while current < high:
        yield current
        current += 1

Emploi du générateur :

for c in counter(3, 9):
    print(c)

Produit une sortie identique. En interne, le générateur ressemble à la classe Counter, prenant en charge le protocole itérateur.

Pour un aperçu complet des itérateurs, veuillez vous référer à l'article de David Mertz, « Itérateurs et générateurs simples ».

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn