Das Ziel dieser Seite ist es, die Dynamik der beiden Iterationsprotokolle zu demonstrieren:
- iterierbar
- Iterator
1. Aber zuerst (um verwirrend ähnliche Wörter hinzuzufügen) wollen wir uns mit der Iteration befassen
- Iteration bedeutet natürlich, Elemente einzeln aus einer Quelle zu nehmen und nacheinander etwas mit jedem zu tun
- In Python wird dies häufig verwendet
- a) for/while-Schleifen und
- b) Verständnis
- Standardmäßig iterieren diese Strukturen über die gesamte Struktur
- Manchmal könnte jedoch eine feinkörnigere Steuerung erforderlich sein – wie bei Generatoren
- Hierfür gibt es zwei wichtige Konzepte/Protokolle, auf denen ein Großteil von Python aufgebaut ist:
- a) iterierbare Objekte
- b) Iteratorobjekte
- beide spiegeln sich in Standard-Python-Protokollen wider
- Das ist kein Extra: Tatsächlich bauen for/while-Schleifen und Comprehensions direkt auf diesen untergeordneten Elementen von Iterationsprotokollen auf
2. ITER()-METHODE ERSTELLT EINEN ITERATOR AUS EINEM ITERABLE
-
iterierbares Objekt (Sammlung oder Stream von Objekten) ist jedes Objekt, das an die integrierte Funktion iter() übergeben werden kann
- Sobald die integrierte Funktion iter() übergeben wurde und ein Iteratorobjekt eines übergebenen Typs zurückgegeben wird, d. h. ein String-Iterator wird mit erstellt
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
Nach dem Login kopieren
Nach dem Login kopieren
- Beachten Sie, dass der Iterator ein implizites Sequenzobjekt ist, das sequenziellen (nicht zufälligen!) Zugriff auf einen zugrunde liegenden sequentiellen Datensatz
bietet
- Zum Beispiel ist das Bereichsobjekt selbst kein Iterator
- Iterator erlaubt keinen Zugriff auf beliebige Elemente der zugrunde liegenden Reihe
- Sie bieten nur Zugriff auf das nächsteElement der Serie
- Sie bieten sequenziellen Zugriff
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
Nach dem Login kopieren
Nach dem Login kopieren
3. Die NEXT()-Funktion gibt den nächsten Wert von einem Iterator zurück
- Das integrierte next() erfordert ein Iterator-Objekt – und es gibt den nächsten Wert in der Iteration einer Sammlung zurück
- Iterator besteht aus 2 Komponenten:
- Mechanismus zum Abrufen des nächsten Elements einer Sammlung
- Mechanismus zur Signalisierung des Endes der Serie
In Programmiersprachen mit integrierten Objektsystemen entspricht diese Abstraktion normalerweise einer bestimmten Schnittstelle, die durch Klassen implementiert werden kann
-
next() ermöglicht es, jedes Element der Reihe nach / auf Anfrage zu betrachten – nicht die gesamte Serie von Anfang bis Ende
- Es gibt 2 Nachrichten-Iterator-Schnittstellen
-
next → Abfrage nach dem nächsten Element
-
iter → den Iterator zurückgeben
- Einschränkung: Iterator kann einmal wiederholt werden
4. BEISPIEL IM KLASSENZIMMER – VON ITERABLE ZU ITERATOR ZU STOPITERATION Exception
- Python löst großzügig eine Ausnahme vom Typ StopIteration aus
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
Nach dem Login kopieren
Nach dem Login kopieren
5. BEISPIEL AUS DEM REALEN LEBEN – EINHEIT TESTEN MEHRERER BEFEHLSZEILE-EINGABEN
- definieren/erhalten Sie ein iterierbares Objekt wie eine Liste ["20.01", "y"]
- übergeben Sie ein iterierbares Objekt an iter() → erstellen Sie ein Iteratorobjekt
- Übergeben Sie ein Iteratorobjekt an next(), um bei jedem Aufruf der Eingabefunktion im Code den nächsten Wert der Liste zu erhalten
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
Nach dem Login kopieren
Nach dem Login kopieren
- Beim ersten Auftreten von input() wird der Wert „20,01“ übergeben,
- Beim zweiten Mal ist es „y“
- Beim dritten Mal wäre es eine Ausnahme
6. LINKS
- https://mypy.readthedocs.io/en/stable/protocols.html#iteration-protocols
- 5.2 Implizite Sequenzen – SICP in Python
Das obige ist der detaillierte Inhalt vonErklären von Iterable vs. Iterator in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!