Maison  >  Article  >  développement back-end  >  La différence entre l'itérateur python et la boucle for

La différence entre l'itérateur python et la boucle for

(*-*)浩
(*-*)浩original
2019-06-28 15:32:576189parcourir

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).

La différence entre l'itérateur python et la boucle for

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!

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