Le but de cette page ? est de démontrer la dynamique des 2 protocoles d'itération :
- itérable
- itérateur
1. MAIS D'ABORD (AJOUTER À DES MOTS SIMILAIRES CONFUSANT), ABORDONS L'ITÉRATION
- L'itération - bien sûr - consiste à prendre les éléments un par un d'une source et à faire quelque chose avec chacun à son tour
- en python, ceci est couramment utilisé dans
- a) les boucles for/while et
- b) compréhensions
- par défaut - ces structures itèrent sur toute la structure
- parfois, cependant, un contrôle plus fin pourrait être nécessaire - comme dans les générateurs
- pour cela, il existe 2 concepts/protocoles importants, sur lesquels une grande partie de Python est construite :
- a) objets itérables
- b) objets itérateurs
- les deux sont reflétés dans les protocoles Python standard
- ce n'est pas quelque chose de plus : en fait, les boucles for/while et les compréhensions sont construites directement sur ces éléments de niveau inférieur des protocoles d'itération
2. LA MÉTHODE ITER() CRÉE UN ITERATEUR À PARTIR D'UN ITERABLE
-
objet itérable (collection ou flux d'objets) est tout objet qui peut être transmis à la fonction iter() intégrée
- une fois passée la fonction intégrée iter() et qui renvoie un objet itérateur d'un type passé, c'est à dire qu'un itérateur de chaîne est créé avec
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
Copier après la connexion
Copier après la connexion
- notez que l'itérateur est un objet séquence implicite fournissant un accès séquentiel (et non aléatoire !) à un ensemble de données séquentiel sous-jacent
- par exemple, l'objet range lui-même n'est pas un itérateur
- l'itérateur ne permet pas l'accès à un élément arbitraire de la série sous-jacente
- ils donnent accès uniquement au suivant élément de la série
- ils fournissent accès séquentiel
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
Copier après la connexion
Copier après la connexion
3. LA FONCTION NEXT() RETOURNE LA VALEUR SUIVANTE À PARTIR D'UN ITÉRATEUR
- le next() intégré nécessite un objet iterator - et il renvoie la valeur suivante dans l'itération d'une collection
- l'itérateur se compose de 2 composants :
- mécanisme de récupération de l'élément suivant d'une collection
- mécanisme de signalisation de la fin de la série
Dans les langages de programmation avec systèmes d'objets intégrés, cette abstraction correspond généralement à une interface particulière qui peut être implémentée par les classes
-
next() permet de considérer chaque élément tour à tour / sur demande - pas toute la série du début à la fin
- il y a 2 messages inclus dans l'interface de l'itérateur
-
suivant → requête pour l'élément suivant
-
iter → renvoie l'itérateur
- contrainte : l'itérateur peut être itéré une fois
4. EXEMPLE DE CLASSE - DE L'ITÉRABLE À L'ITÉRATEUR À L'EXCEPTION D'ARRÊTITÉRATION
- Python, généreusement, lève une exception du type StopIteration
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
Copier après la connexion
Copier après la connexion
5. EXEMPLE RÉEL - TEST UNITÉ DE PLUSIEURS ENTRÉES DE LIGNE DE COMMANDE
- définir/obtenir un objet itérable tel qu'une liste ["20.01", "y"]
- passer un objet itérable dans iter() → créer un objet itérateur
- passez un objet itérateur dans un next() pour obtenir la valeur suivante de la liste à chaque fois que la fonction d'entrée est appelée dans le code
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
Copier après la connexion
Copier après la connexion
- la première fois que input() est rencontré, la valeur "20.01" est transmise,
- la deuxième fois c'est "y"
- la troisième fois ce serait une exception
6. LIENS
- https://mypy.readthedocs.io/en/stable/protocols.html#iteration-protocols
- 5.2 Séquences implicites - SICP en Python
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!