Itérateur Python
- Page précédente Héritage Python
- Page suivante Portée Python
Itérateur Python
Un itérateur est un objet qui contient un nombre comptable de valeurs.
Un itérateur est un objet itérable, 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, contenant des méthodes __iter__()
et __next__()
.
Itérateur VS Objet Itérable (Iterable)
Les listes, tuples, dictionnaires et ensembles sont des objets itérables. Ils sont des conteneurs itérables, à partir desquels vous pouvez obtenir des itérateurs (Iterator).
Tous ces objets ont une méthode pour obtenir des itérateurs iter()
Méthode :
Exemple
Retourner un itérateur à partir d'un tuple et imprimer chaque valeur :
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Même les chaînes de caractères sont des objets itérables et peuvent retourner des itérateurs :
Exemple
Les chaînes de caractères sont également des objets itérables, contenant une série de caractères :
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
parcourir un itérateur
Nous pouvons également utiliser une boucle for pour parcourir des objets itérables :
Exemple
itérer sur les valeurs d'un tuple :
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Exemple
itérer sur les caractères d'une chaîne :
mystr = "banana" for x in mystr: print(x)
Astuce :Le boucle for crée effectivement un objet itérateur et exécute next()
méthode.
créer un itérateur
Pour créer un objet/classe en tant qu'itérateur, il est nécessaire d'implémenter __iter__()
et __next__()
méthode.
Comme vous avez appris dans le chapitre Classes/Objets en Python, toutes les classes ont un nom __init__()
La fonction, qui vous permet d'effectuer certaines initialisations lors de la création d'un objet.
__iter__()
La méthode joue un rôle similaire, vous pouvez exécuter des opérations (initialisation, etc.), mais vous devez toujours retourner l'objet itérateur lui-même.
__next__()
La méthode permet également d'exécuter des opérations et doit retourner l'élément suivant de la séquence.
Exemple
Créer un itérateur qui renvoie des nombres, en commençant par 1 et augmentant de 1 à chaque séquence (retourne 1, 2, 3, 4, 5, etc.) :
class MyNumbers: def __iter__(self): self.a = 1 retourner self def __next__(self): x = self.a self.a += 1 retourner x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
StopIteration
Si vous avez suffisamment de next()
instruction, ou dans une boucle for, l'exemple ci-dessus se poursuivra éternellement.
Pour éviter que l'itération ne se poursuive éternellement, nous pouvons utiliser StopIteration
instruction.
dans __next__()
Dans une méthode, si l'itération est terminée le nombre de fois spécifié, nous pouvons ajouter une condition de terminaison pour lancer une erreur :
Exemple
S'arrêter après 20 itérations :
class MyNumbers: def __iter__(self): self.a = 1 retourner self def __next__(self): si self.a <= 20: x = self.a self.a += 1 retourner x else: lancer StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
- Page précédente Héritage Python
- Page suivante Portée Python