Quels sont exactement Python - de itérateur, itératives, et des protocoles d'itération Stack Overflow

Iteration est un terme général pour prendre chaque élément de quelque chose, l'un après l'autre. Chaque fois que vous utilisez une boucle, explicite ou implicite, d'aller sur un groupe d'éléments, qui est l'itération.

En Python, itérables et iterator ont une signification particulière.

Un iterable est un objet qui présente une méthode de __iter__ qui renvoie un itérateur. ou qui définit une méthode de __getitem__ qui peut prendre des index séquentiels à partir de zéro (et soulève un IndexError lorsque les index ne sont plus valables). Ainsi, un itérable est un objet que vous pouvez obtenir un itérateur de.

Un itérateur est un objet avec un procédé suivant (Python 2) ou __next__ (Python 3).

Chaque fois que vous utilisez une boucle, ou d'une carte. ou une compréhension de liste, etc. en Python, la méthode suivante est appelée automatiquement pour obtenir chaque élément de l'itérateur. passant ainsi à travers le processus d'itération.

Voici l'explication que je l'utilise dans l'enseignement des classes Python:

Un itérateur est un objet:

  • avec l'état qui se souvient où il est lors de l'itération,
  • avec un procédé de __next__ que:
    • retourne la valeur suivante de l'itération
    • met à jour l'état du point à la valeur suivante
    • signaux lorsqu'il est fait en augmentant StopIteration
  • et qui est auto-iterable (ce qui signifie qu'il a un procédé de __iter__ qui retourne auto-).
  • La méthode de __next__ dans le python 3 est écrit à côté dans le python 2, et
  • La fonction suivante builtin () appelle cette méthode sur l'objet qui lui est passé.

Les réponses ci-dessus sont grands, mais comme la plupart de ce que je l'ai vu, ne soulignent pas la distinction assez pour les gens comme moi.

De plus, les gens ont tendance à se « trop Pythonic » en mettant des définitions comme « X est un objet qui a la méthode __foo __ () » avant. Ces définitions sont correctes - ils sont basés sur la philosophie typage de canard, mais l'accent sur les méthodes ont tendance à se placer entre en essayant de comprendre le concept dans sa simplicité.

J'ajoute donc ma version.

Dans le langage naturel,

  • itération consiste à prendre un élément à la fois dans une rangée d'éléments.

iterable est un objet qui est, ainsi, iterable, qui simplement, signifie qu'elle peut être utilisée dans l'itération, par exemple, avec une boucle. Comment? En utilisant iterator. Je vais vous expliquer ci-dessous.

tandis que itérateur est un objet qui définit comment faire réellement l'itération - plus précisément ce qui est l'élément suivant. Voilà pourquoi il doit avoir la méthode suivante ().

Itérateurs eux-mêmes sont également itératives, avec la distinction que leur méthode __ de __iter () retourne le même objet (auto), peu importe si oui ou non ses articles ont été consommés par les appels précédents à côté ().

Alors, qu'est-ce que l'interprète Python pense quand il voit pour x dans obj: déclaration?

Regardez, une boucle. On dirait un emploi pour un itérateur. Mettons-nous une. Il y a ce type de obj, donc nous allons lui demander.

« Monsieur obj. Est-ce que vous avez votre iterator? » (. Iter appelle (obj). Qui appelle obj .__ iter __ (). Qui tend heureusement une nouvelle iterator _Je brillant.)

OK, c'était facile. Commençons alors itérer. (X = _i.next (). X = _i.next ()).

Étant donné que M. obj a réussi à ce test (en ayant certaine méthode retournant un itérateur valide), nous le récompensons avec adjectif: vous pouvez maintenant l'appeler « M. itérables obj ».

Cependant, dans les cas simples, vous ne bénéficiez pas normalement d'avoir iterator et itérables séparément. Donc, vous définissez un seul objet, qui est aussi son propre itérateur. (Python ne se soucie pas vraiment _Je remis par obj était pas si brillant, mais juste l'obj lui-même.)

C'est pourquoi dans la plupart des exemples que je l'ai vu (et ce qui avait été me confondre plus et plus), vous pouvez voir:

Imaginez ce que vous pourriez faire:

Bien sûr, pour n'est pas la seule boucle d'itération, applique donc ci-dessus pour d'autres constructions aussi bien (tout.).

à côté de iterator () peut jeter StopIteration pour arrêter l'itération. Ne doit pas, cependant, il peut itérer toujours ou utiliser d'autres moyens.

Dans ce qui précède « processus de pensée », _Je n'existe pas vraiment. J'ai pris ce nom.

Il y a un petit changement de Python 3.x: méthode suivante () (et non intégré) doit maintenant être appelé __next __ (). Oui, il aurait dû être comme ça tout le long.

Vous pouvez aussi penser comme ceci: itérables a les données, iterator tire l'élément suivant

Disclaimer: Je ne suis pas un développeur d'un interpréteur Python, donc je ne sais pas vraiment ce que l'interprète « pense ». Les réflexions ci-dessus sont uniquement la démonstration de la façon dont je comprends le sujet d'autres explications, des expériences et des expériences de la vie réelle d'un débutant Python.

Un iterable est un objet qui présente un procédé de __iter __ (). Il peut éventuellement itéré plusieurs fois, comme la liste () s et tuple () s.

Un itérateur est l'objet d'itération. Il est retourné par une méthode __ de __iter (), retourne lui-même par sa propre méthode __iter __ () et une méthode suivante () (__next __ () 3.x).

Iteration est le processus d'appel de cette resp prochaine (). __next __ () jusqu'à ce qu'il soulève StopIteration.

Je ne pense pas que vous pouvez obtenir beaucoup plus simple que la documentation. mais je vais essayer:

  • Iterable est quelque chose qui peut être itéré. Dans la pratique, cela signifie généralement une séquence, par exemple quelque chose qui a un début et une fin et un moyen de passer par tous les éléments qu'il contient.

Vous pouvez penser Iterator comme pseudo-méthode d'assistance (ou pseudo-attribut) qui donne (ou détient) l'élément suivant (ou première) dans le itérables. (En pratique, il se trouve un objet qui définit la méthode suivante ())

Iteration est probablement mieux expliqué par la définition Merriam-Webster du mot:

b. la répétition d'une séquence d'instructions d'ordinateur un certain nombre de fois ou jusqu'à ce qu'une condition soit remplie - comparer récursion

Je ne sais pas si ça aide tout le monde mais je l'aime toujours visualiser des concepts dans ma tête afin de mieux les comprendre. Donc, comme je l'ai un petit fils, je visualiser notion itérables / iterator avec des briques et du papier blanc.

Supposons que nous sommes dans la pièce sombre et à l'étage, nous avons des briques pour mon fils. Briques de différentes tailles, couleurs, n'a pas d'importance maintenant. Supposons que nous ayons 5 briques comme celles-ci. Ces 5 briques peuvent être décrits comme un objet - disons kit de briques. Nous pouvons faire beaucoup de choses avec ce kit de briques - peut prendre l'une, puis prendre la deuxième et troisième, peut changer les lieux de briques, de mettre la première pierre au-dessus du second. Nous pouvons faire beaucoup de sortes de choses avec ceux-ci. Par conséquent, ce kit de briques est un objet itérable ou d'une séquence que nous pouvons passer par chaque brique et faire quelque chose avec elle. Nous ne pouvons le faire comme mon petit fils - on peut jouer avec une brique à la fois. Donc, encore une fois, je me imagine ce kit de briques pour être un itérable.

Souviens-toi que nous sommes dans la chambre noire. Ou presque sombre. La chose est que nous faisons ce que la forme, etc. Donc, même si nous voulons faire quelque chose avec les voit pas clairement ces briques, quelle couleur ils sont, - aka itérer eux - nous ne savons pas vraiment quoi et comment, car il est trop sombre.

Ce que nous pouvons faire est proche de la première brique - en tant qu'élément d'un kit de briques - nous pouvons mettre un morceau de papier fluorescent blanc pour que nous puissions voir où le premier élément de brique est. Et chaque fois que nous prenons une brique d'un kit, on remplace la feuille de papier blanc à une brique suivante afin d'être en mesure de voir que dans la pièce sombre. Ce morceau de papier blanc est rien de plus qu'un iterator. Il est un objet aussi bien. Mais un objet avec ce que nous pouvons travailler et jouer avec des éléments de notre objet itérable - kit de briques.

Que par la voie explique ma première erreur quand j'ai essayé ce qui suit dans un IDLE et a obtenu un TypeError:

Liste X ici était notre kit de briques, mais pas un morceau de papier blanc. Je devais trouver un itérateur premier:

Je ne sais pas si ça aide, mais il m'a aidé. Si quelqu'un pouvait confirmer / visualisation correcte du concept, je vous serais reconnaissant. Il me aider à en savoir plus.

répondit le 30 septembre '15 à 12:25

iterable est un objet qui peut être une boucle sur. par exemple. liste. chaîne. Tupple etc.

objet itérable utilise une fonction iter qui renverra un objet iterator.

maintenant cet objet iterator a méthode nommée __next__ par laquelle il peut accéder à chaque élément de itérables.

ainsi, SORTIE DE CODE CI-DESSUS SERA:

répondit le 19 juin à 12h57

En Python tout est un objet. Quand un objet est dit être iterable, cela signifie que vous pouvez parcourir (à savoir iterate) l'objet comme une collection.

Les tableaux sont par exemple itérables. Vous pouvez passer à travers eux avec une boucle, et à partir de l'indice 0 pour indice n, n étant la longueur de l'objet de réseau de moins 1.

Dictionnaires (paires de clé / valeur, également appelés tableaux associatifs) sont également iterable. Vous pouvez parcourir leurs clés.

Il est évident que les objets qui ne sont pas des collections ne sont pas itérable. Un objet bool par exemple seulement ont une valeur, Vrai ou Faux. Il n'est pas itérable (il ne serait pas logique que c'est un objet itérable).

répondit le 15 juillet '14 à 08h59

Ta Réponse

Articles Liés