Maison > développement back-end > Tutoriel Python > Expliquer Iterable vs Iterator en Python

Expliquer Iterable vs Iterator en Python

Susan Sarandon
Libérer: 2025-01-01 07:42:18
original
805 Les gens l'ont consulté

Explaining Iterable vs Iterator in Python

Le but de cette page ? est de démontrer la dynamique des 2 protocoles d'itération :

  1. itérable
  2. 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

  1. définir/obtenir un objet itérable tel qu'une liste ["20.01", "y"]
  2. passer un objet itérable dans iter() → créer un objet itérateur
  3. 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!

source:dev.to
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal