Maison > Article > développement back-end > La différence entre l'itérateur python et la boucle for
Itérateur : L'objet itérateur doit implémenter à la fois les méthodes __iter__ et __next__ pour être un itérateur. Pour les itérateurs, __iter__ renvoie son propre moi et __next__ renvoie la valeur suivante dans l'itérateur. Lorsqu'il n'y a aucun élément à la fin, une exception est levée (l'exception peut être vue par le développeur).
1. L'itérateur doit être un objet itérable car il implémente la méthode __iter__() (Apprentissage recommandé : Tutoriel vidéo Python)
2. Grâce à la méthode iter() (__iter__ à l'intérieur de la classe), un objet itérable peut renvoyer un itérateur.
3. La méthode __iter__ de l'itérateur se retourne et ne génère pas de nouvel objet itérateur.
La troisième propriété est la raison pour laquelle les objets itérables peuvent être parcourus à plusieurs reprises (retourner un itérateur indépendant à chaque fois peut garantir que différents processus d'itération ne s'affecteront pas les uns les autres et les itérateurs car renvoie lui-même, donc il ne peut que) ; être parcouru une seule fois.
Le mécanisme de fonctionnement de la boucle For
Lorsque l'objet lui-même est un itérateur, le mécanisme de fonctionnement de la boucle For :
Call_ La méthode _iter__ se renvoie elle-même, qui est un itérateur. Appelez continuellement la méthode next() de l'itérateur, renvoyant à chaque fois une valeur dans l'itérateur dans l'ordre. Lorsqu'il n'y a aucun élément à la fin de l'itération, une exception StopIteration est levée
Dans un objet itérable, le mécanisme de fonctionnement de la boucle for :
Déterminez d'abord si le object est un objet itérable (équivalent à juger s'il existe une méthode __iter__ ou __getitem__), sinon, une erreur sera signalée directement et une exception TypeError sera levée. Si tel est le cas, appelez la méthode __iter__ et renvoyez un itérateur. La méthode __next__ de l'itérateur est appelée en permanence dans Python, et chaque fois qu'une valeur de l'itérateur est renvoyée dans l'ordre. Lorsqu'il n'y a aucun élément à la fin de l'itération, l'exception StopIteration sera levée. Python gérera cette exception par lui-même et ne l'exposera pas aux développeurs.
De plus, veuillez noter que la boucle for en python est en réalité compatible avec deux mécanismes :
Si l'objet a __iter__, un itérateur sera renvoyé. Si l'objet n'a pas __iter__ mais implémente __getitem__, l'itération en indice sera utilisée à la place. __getitem__ peut aider un objet à effectuer des opérations de comptage et de tranche.
Lorsque for découvre qu'il n'y a pas de __iter__ mais qu'il y a __getitem__, il lira les indices correspondants à partir de 0 jusqu'à ce qu'une IndexError se produise. La méthode iter gérera également cette situation. Lorsque __iter__ n'existe pas, elle renverra à la place un objet itérateur avec une itération en indice. Un exemple important est str. La chaîne n'a pas la méthode __iter__, mais elle peut toujours être itérée. La raison est que la méthode __getitem__ est appelée pendant la boucle for.
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
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!