Maison  >  Article  >  développement back-end  >  Protocole itérateur et méthodes de traversée en programmation Python

Protocole itérateur et méthodes de traversée en programmation Python

WBOY
WBOYavant
2023-05-08 14:34:08949parcourir

Préface

L'introduction de la partie précédente devrait nous permettre de comprendre et de maîtriser facilement les objets itérables et les itérateurs (Iterable & Iterator) en Python​​. Dans ce contenu, nous présenterons plus en détail le contenu associé des itérateurs.

Protocole itérateur et méthodes de traversée en programmation Python

Protocole itérateur

En Python, l'objet itérateur (Iterator) doit prendre en charge les deux méthodes suivantes, qui forment ensemble le protocole itérateur :

1) __iter__() :

Cette méthode de l'objet Renvoie l'objet itérateur lui-même. Ceci est requis pour que les conteneurs et les itérateurs soient utilisés avec des instructions for-in. Vous pouvez également utiliser la fonction iter() intégrée, qui appelle essentiellement la méthode __iter__() en arrière-plan.

2)__next__() :

Renvoie l'élément suivant de l'itérateur. S'il n'y a aucun autre élément, une exception StopIteration est levée. Vous pouvez également utiliser la fonction intégrée next() pour lire l'élément suivant, qui appelle essentiellement la méthode __next__().

Comme nous l'avons déjà dit, les listes, les tuples, les dictionnaires et les ensembles sont tous des types itérables. En d’autres termes, ce sont des types à partir desquels des itérateurs peuvent être obtenus. Regardez l'exemple :

Protocole itérateur et méthodes de traversée en programmation Python

Extrait de code listing-01

Le résultat d'entrée est le suivant :

A
B
C

Dans l'exemple de code, nous définissons un tuple itérable. Appelez ensuite la fonction iter() sur cet objet itérable. La fonction iter() renvoie un itérateur, que nous nommons tupIter. Appelez ensuite la fonction next() plusieurs fois. Chaque fois que la fonction next() est exécutée, elle renverra automatiquement l'élément suivant de l'itérateur.

Regardez l'exemple de code suivant :

Protocole itérateur et méthodes de traversée en programmation Python

Code Fragment-02

Le résultat de l'exécution est :

P
y

Dans la liste de codes ci-dessus, la méthode __iter__() est appelée sur l'objet chaîne. Les objets chaîne implémentent le protocole itérateur, les chaînes sont donc des objets itérables contenant des séquences de caractères. L’appel de la méthode __iter__() renvoie directement un itérateur. Appelez ensuite la méthode __next__() via l'itérateur renvoyé pour afficher les éléments de l'itérateur un par un.

En un mot, tant que l'objet implémente le protocole itérateur, vous pouvez utiliser les deux méthodes ci-dessus pour effectuer des appels itératifs sur l'objet.

Parcours d'un itérateur

Comme nous l'avons vu dans l'introduction précédente, nous utilisons la fonction next() (ou la méthode __next__()) pour parcourir manuellement les éléments d'un itérateur. Lorsque la fonction next() atteint la fin de l'itérateur, il n'y a plus de données à renvoyer et vous obtiendrez une exception StopIteration.

Veuillez consulter l'exemple :

Protocole itérateur et méthodes de traversée en programmation Python

Liste de fragments de code-03

Exécutez le programme ci-dessus, le résultat est similaire à ce qui suit :

Dans le code ci-dessus, la fonction next() est appelée quatre fois, ce qui est plus que le nombre d'éléments dans l'itérateur. Lors du dernier appel, une exception StopIteration a été levée, car les éléments de l'itérateur ont été itérés. De plus, afin de garantir que des exceptions puissent être levées une fois l'itération manuelle terminée, la gestion des exceptions doit être effectuée par vous-même, sinon l'exécution ultérieure ne sera plus normale.

Ce qu'il faut comprendre, c'est que dans la plupart des scénarios, nous n'avons pas besoin d'appeler manuellement la méthode suivante nous-mêmes. La boucle for en Python peut parcourir automatiquement n'importe quel objet pouvant renvoyer un itérateur. En d’autres termes, une boucle for peut parcourir n’importe quel objet itérable en Python.

Veuillez consulter l'exemple :

Protocole itérateur et méthodes de traversée en programmation Python

Extrait de liste de code 04

Dans le code ci-dessus, nous utilisons une boucle for pour parcourir la liste définie précédemment. Il est évident que nous n’avons pas utilisé la fonction next() manuellement et que nous n’avons obtenu aucune exception StopIteration. C'est la beauté des boucles for en Python. Il gère tout cela pour nous en coulisses.

Bien sûr, nous pouvons gérer nous-mêmes les itérations de boucles de cette façon. Définissez maintenant notre propre version de la boucle for. Nous utiliserons une boucle while et reproduirons le comportement d'une boucle for. Ici, nous construisons nous-mêmes tout ce qui est nécessaire à cette mise en œuvre. Comme indiqué ci-dessous :

Protocole itérateur et méthodes de traversée en programmation Python

Extrait de liste de codes-05

Dans la liste ci-dessus, nous avons implémenté notre propre version d'une boucle for simulée. Une boucle while infinie est utilisée dans le code : while True. Un bloc try-sauf est mis en place à l’intérieur de la boucle. Dans le bloc try, récupérez l’élément suivant en appelant la méthode __next__() sur l’itérateur. Si l'appel réussit, l'élément est imprimé. Si une erreur de type StopIteration se produit, l'exception est interceptée dans le bloc except. Ce que vous faites dans le bloc except est très simple. Nous sortons tout juste de cette boucle, ce qui signifie que nous avons atteint la fin de l'itérateur.

Résumé

C'est tout pour cet article, qui présente principalement le protocole d'itérateur et le parcours d'itérateur. Le texte du contenu n'est pas long et combiné avec le code peut vous aider à mieux comprendre et maîtriser ces points de connaissances en programmation Python.

10

20

30

Traceback (dernier appel le plus récent):

Fichier ……, dans

print(next(listIter))

StopItération

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer