Heim  >  Artikel  >  Backend-Entwicklung  >  Iteratorprotokoll und Traversalmethoden in der Python-Programmierung

Iteratorprotokoll und Traversalmethoden in der Python-Programmierung

WBOY
WBOYnach vorne
2023-05-08 14:34:08948Durchsuche

Vorwort

Die Einführung des vorherigen Teils soll es uns erleichtern, iterierbare Objekte und Iteratoren (Iterable & Iterator) in Python zu verstehen und zu beherrschen. In diesem Inhalt werden wir den zugehörigen Inhalt von Iteratoren weiter vorstellen.

Iteratorprotokoll und Traversalmethoden in der Python-ProgrammierungIterator-Protokoll

In Python muss das Iterator-Objekt (Iterator) die folgenden zwei Methoden unterstützen, die zusammen das Iterator-Protokoll bilden:

1) __iter__():

Diese Methode des Objekts Gibt das Iteratorobjekt selbst zurück. Dies ist erforderlich, damit Container und Iteratoren mit For-In-Anweisungen verwendet werden können. Sie können auch die integrierte Funktion iter() verwenden, die im Wesentlichen die Methode __iter__() im Hintergrund aufruft.

2)__next__():

Gibt das nächste Element vom Iterator zurück. Wenn keine anderen Elemente vorhanden sind, wird eine StopIteration-Ausnahme ausgelöst. Sie können auch die integrierte Funktion next() verwenden, um das nächste Element zu lesen, was im Wesentlichen den Aufruf der Methode __next__() bedeutet.

Wie bereits erwähnt, sind Listen, Tupel, Wörterbücher und Mengen allesamt iterierbare Typen. Mit anderen Worten: Es handelt sich um Typen, von denen Iteratoren abgerufen werden können. Schauen Sie sich das Beispiel an:

Iteratorprotokoll und Traversalmethoden in der Python-ProgrammierungCode-Snippet-Listing-01

Das Eingabeergebnis lautet wie folgt:

A
B
C

Im Beispielcode definieren wir ein iterierbares Tupel. Rufen Sie dann die Funktion iter() für dieses iterierbare Objekt auf. Die Funktion iter() gibt einen Iterator zurück, den wir tupIter nennen. Rufen Sie dann die Funktion next() mehrmals auf. Jedes Mal, wenn die Funktion next() ausgeführt wird, wird automatisch das nächste Element im Iterator zurückgegeben.

Sehen Sie sich den nächsten Beispielcode an:

Iteratorprotokoll und Traversalmethoden in der Python-ProgrammierungCodefragment-02

Das Ergebnis der laufenden Ausgabe ist:

P
y

In der obigen Codeauflistung wird die Methode __iter__() für das String-Objekt aufgerufen. String-Objekte implementieren das Iterator-Protokoll, daher sind Strings iterierbare Objekte, die Zeichenfolgen enthalten. Der direkte Aufruf der Methode __iter__() gibt einen Iterator zurück. Rufen Sie dann die Methode __next__() über den zurückgegebenen Iterator auf, um die Elemente im Iterator einzeln auszugeben.

Kurz gesagt: Solange das Objekt das Iteratorprotokoll implementiert, können Sie die beiden oben genannten Methoden verwenden, um iterative Aufrufe für das Objekt durchzuführen.

Iterator-Traversal

Wie wir in der vorherigen Einführung gesehen haben, verwenden wir die Funktion next() (oder die Methode __next__()), um die Elemente eines Iterators manuell zu durchlaufen. Wenn die Funktion next() das Ende des Iterators erreicht, können keine Daten mehr zurückgegeben werden und Sie erhalten eine StopIteration-Ausnahme.

Bitte sehen Sie sich das Beispiel an:

Iteratorprotokoll und Traversalmethoden in der Python-ProgrammierungCodefragmentliste-03

Führen Sie das obige Programm aus. Die Ausgabe ähnelt der folgenden:

10

20

30

StopIteration

Im obigen Code wird die Funktion next() viermal aufgerufen, was mehr ist als die Anzahl der Elemente im Iterator. Beim letzten Aufruf wurde eine StopIteration-Ausnahme ausgelöst, da die Elemente im Iterator iteriert wurden. Um sicherzustellen, dass nach Abschluss der manuellen Iteration Ausnahmen ausgelöst werden können, muss außerdem die Ausnahmebehandlung selbst durchgeführt werden, da sonst die nachfolgende Ausführung nicht mehr normal ist.

Was erkannt werden muss, ist, dass wir in den meisten Szenarien die nächste Methode nicht selbst manuell aufrufen müssen. Die for-Schleife in Python kann automatisch jedes Objekt durchlaufen, das einen Iterator zurückgeben kann. Mit anderen Worten: Eine for-Schleife kann jedes iterierbare Objekt in Python durchlaufen.

Bitte sehen Sie sich das Beispiel an:

Iteratorprotokoll und Traversalmethoden in der Python-Programmierung

Code-Listing-Snippet 04

Im obigen Code verwenden wir eine for-Schleife, um die zuvor definierte Liste zu durchlaufen. Es ist offensichtlich, dass wir die Funktion next() nicht manuell verwendet haben und keine StopIteration-Ausnahme erhalten haben. Das ist das Schöne an for-Schleifen in Python. All das erledigt es für uns hinter den Kulissen.

Natürlich können wir auf diese Weise auch selbst Schleifeniterationen handhaben. Definieren Sie nun unsere eigene Version der for-Schleife. Wir werden eine while-Schleife verwenden und das Verhalten einer for-Schleife nachbilden. Hier bauen wir alles, was für diese Umsetzung benötigt wird, selbst. Wie unten gezeigt:

Iteratorprotokoll und Traversalmethoden in der Python-Programmierung

Code Listing Snippet-05

In der obigen Auflistung haben wir unsere eigene Version einer simulierten for-Schleife implementiert. Im Code wird eine Endlosschleife verwendet: while True. Innerhalb der Schleife wird ein Try-Except-Block eingerichtet. Rufen Sie im try-Block das nächste Element ab, indem Sie die Methode __next__() im Iterator aufrufen. Wenn der Aufruf erfolgreich ist, wird das Element gedruckt. Wenn ein Fehler vom Typ StopIteration auftritt, wird die Ausnahme im Except-Block abgefangen. Was Sie im Except-Block tun, ist sehr einfach. Wir brechen gerade aus dieser Schleife aus, was bedeutet, dass wir das Ende des Iterators erreicht haben.

Zusammenfassung

Das ist alles für diesen Artikel, der hauptsächlich das Iteratorprotokoll und die Iteratordurchquerung vorstellt. Der Text des Inhalts ist nicht lang und kann Ihnen in Kombination mit dem Code dabei helfen, diese Wissenspunkte zur Python-Programmierung besser zu verstehen und zu beherrschen.

Das obige ist der detaillierte Inhalt vonIteratorprotokoll und Traversalmethoden in der Python-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen