Itérateurs Python

Itérateurs Python
Un itérateur est un objet qui contient un nombre dénombrable de valeurs.
Un itérateur est un objet sur lequel on peut itérer, ce qui signifie que vous pouvez parcourir toutes les valeurs.
Techniquement, en Python, un itérateur est un objet qui implémente le protocole itérateur, composé des méthodes __iter__()
et __next__()
.
Itérateur vs Itérable
Les listes, tuples, dictionnaires et ensembles sont tous des objets itérables. Ils sont itérables
conteneurs à partir duquel vous pouvez obtenir un itérateur.
Tous ces objets ont une iter()
méthode utilisée pour obtenir un itérateur :
Exemple
Renvoie un itérateur à partir d’un tuple et imprime chaque valeur :
mytuple = (“pomme”, “banane”, “cerise”)
monit = iter(montuple)
imprimer(suivant(myit))
imprimer(suivant(myit))
imprimer(suivant(myit))
Essayez-le vous-même »
Même les chaînes sont des objets itérables et peuvent renvoyer un itérateur :
Exemple
Les chaînes sont également des objets itérables, contenant une séquence de caractères :
mystr = “banane”
myit = iter(mystr)
imprimer(suivant(myit))
imprimer(suivant(myit))
imprimer(suivant(myit))
imprimer(suivant(myit))
imprimer(suivant(myit))
imprimer(suivant(myit))
Essayez-le vous-même »
Boucler dans un itérateur
Nous pouvons également utiliser un for
boucle pour parcourir un objet itérable :
Exemple
Itérer les valeurs d’un tuple :
mytuple = (“pomme”, “banane”, “cerise”)
pour x dans montuple :
impression(x)
Essayez-le vous-même »
Exemple
Itérer les caractères d’une chaîne :
mystr = “banane”
pour x dans mystr :
impression(x)
Essayez-le vous-même »
Le for
loop crée en fait un objet itérateur et exécute la méthode next() pour chaque boucle.
Créer un itérateur
Pour créer un objet/une classe en tant qu’itérateur, vous devez implémenter les méthodes
__iter__()
et
à votre objet.
__next__()
Comme vous l’avez appris dans le chapitre Classes/Objets Python, toutes les classes ont une fonction appelée
__init__()
ce qui vous permet d’effectuer une initialisation lors de la création de l’objet.
Le __iter__()
La méthode agit de la même manière, vous pouvez effectuer des opérations (initialisation, etc.), mais vous devez toujours renvoyer l’objet itérateur lui-même.
Le __next__()
La méthode vous permet également d’effectuer des opérations et doit renvoyer l’élément suivant dans la séquence.
Exemple
Créez un itérateur qui renvoie des nombres, en commençant par 1, et chaque séquence augmentera de un (renvoyant 1,2,3,4,5 etc.) :
classe MesNuméros :
def __iter__(soi):
soi.a = 1
revenir soi-même
def __suivant__(soi):
x = soi.a
soi.a += 1
retour x
maclasse = MesNombres()
moniter = iter(maclasse)
print(suivant(myiter))
print(suivant(myiter))
print(suivant(myiter))
print(suivant(myiter))
print(suivant(myiter))
Essayez-le vous-même »
ArrêterItération
L’exemple ci-dessus continuerait indéfiniment si vous aviez suffisamment d’instructions next(), ou s’il était utilisé dans un
for
boucle.
Pour éviter que l’itération ne se poursuive indéfiniment, nous pouvons utiliser le
StopIteration
déclaration.
Dans le __next__()
nous pouvons ajouter une condition de fin pour générer une erreur si l’itération est effectuée un nombre de fois spécifié :
Exemple
Arrêt après 20 itérations :
classe MesNuméros :
def __iter__(soi):
soi.a = 1
revenir soi-même
def __suivant__(soi):
si self.a <= 20 :
x = soi.a
soi.a += 1
retour x
autre:
augmenter StopIteration
maclasse = MesNombres()
moniter = iter(maclasse)
pour x en myiter :
impression(x)
Essayez-le vous-même »
#Itérateurs #Python