Python-Programmierung: Iterierbare Objekte und Iteratoren (Iterable & Iterator)

王林
Freigeben: 2023-04-20 12:19:06
nach vorne
1294 Leute haben es durchsucht

Vorwort

Bei der Python-Programmierung ist die Schleifenverarbeitung unvermeidlich, was zwei wichtige Konzepte beinhaltet, nämlich iterierbare Objekte und Iteratoren (Iterable & Iterator). Ich werde dieses Thema der Iteration in zwei bis drei Teilen vorstellen, um Ihnen das Verständnis und die Anwendung in der tatsächlichen Programmierung zu erleichtern. Dieser Artikel ist der erste.

Python-Programmierung: Iterierbare Objekte und Iteratoren (Iterable & Iterator)

Iterierbares Objekt

Ein iterierbares Objekt (Iterable) bezieht sich auf ein Objekt, das jeweils ein Mitglied zurückgeben kann. Beispiele für iterierbare Objekte sind alle Sequenztypen (z. B. list, str und tuple) und einige Nicht-Sequenztypen wie dict, Dateiobjekte und alle Objekte einer von Ihnen definierten Klasse, die die Methode __iter__() oder die Methode __getitem__ implementieren Semantik, die durch die ()-Methode spezifiziert wird – und das Iterationsprotokoll (siehe hier für Details: ).

Iterierbare Objekte können in for-Schleifen und an anderen Stellen verwendet werden, an denen Sequenzen erforderlich sind (z. B. zip(), map(), filter()...). Wenn ein iterierbares Objekt als Parameter an die integrierte Funktion iter() übergeben wird, gibt sie einen Iterator dieses Objekts zurück. Dieser Iterator eignet sich nur zum einmaligen Durchlaufen einer Reihe von Werten. Wenn Sie mit iterierbaren Objekten arbeiten, müssen Sie im Allgemeinen weder iter() aufrufen noch das Iteratorobjekt selbst bearbeiten. Dies erfolgt automatisch mithilfe einer for-Anweisung, die eine temporäre unbenannte Variable erstellt, die zum Halten des Iterators während der Schleife verwendet wird.

Kurz gesagt ist ein iterierbares Objekt jedes Klassenobjekt, das die Methode __iter__() oder die Methode __getitem__() implementiert.

Iterator

Iterator (Iterator) bezieht sich auf ein Objekt, das einen Datenfluss darstellt. Durch wiederholtes Aufrufen der __next__()-Methode des Iterators (oder Übergeben an die integrierte Funktion next()) werden aufeinanderfolgende Elemente im Stream zurückgegeben. Wenn keine Daten mehr verfügbar sind, wird die StopIteration-Ausnahme ausgelöst. Zu diesem Zeitpunkt ist das Iteratorobjekt erschöpft und alle weiteren Aufrufe seiner __next__()-Methode lösen StopIteration erneut aus. Iteratoren müssen über eine __iter__()-Methode verfügen, die das Iteratorobjekt selbst zurückgibt, sodass jeder Iterator auch iterierbar ist und an den meisten Orten verwendet werden kann, die andere iterierbare Objekte akzeptieren.

Kurz gesagt ist ein Iterator ein Datenflussobjekt, das zwei Iteratorprotokollmethoden implementiert: __next__() und __iter__().

Eine bemerkenswerte Ausnahme ist Code, der versucht, mehrmals zu iterieren (wobei derselbe Iterator mehrmals verwendet wird). Ein Containerobjekt (z. B. eine Liste) generiert jedes Mal einen neuen Iterator, wenn es an die Funktion iter() übergeben oder in einer for-Schleife verwendet wird. Wenn Sie dies mit einem Iterator versuchen, wird einfach das erschöpfte Iteratorobjekt zurückgegeben, das während der vorherigen Iteration verwendet wurde, sodass es wie ein leerer Container aussieht. Vermeiden Sie diese Situation also beim Schreiben von Code.

iter-Funktion

Darüber hinaus müssen Sie verstehen, dass die integrierte Funktion iter() (die im Hintergrund die Methode __iter__() aufruft) ein Iteratorobjekt zurückgibt . So können wir sagen. Ein Iterable ist ein Objekt, das einen Iterator zurückgibt.

Um Iteratoren und iterierbare Objekte besser zu verstehen, werde ich anschließend Erklärungen und Codebeispiele geben, um die folgenden Schlüsselpunkte näher vorzustellen:

  • Iteratorprotokoll und Loop
  • implementiert einen benutzerdefinierten Iterator.

Das obige ist der detaillierte Inhalt vonPython-Programmierung: Iterierbare Objekte und Iteratoren (Iterable & Iterator). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage