Iteratoren in Python
Dieser Artikel erklärt Iteratoren in Python.
YouTube Video
Iteratoren in Python
Überblick
In Python ist ein Iterator ein grundlegender Mechanismus, um die Elemente von Aufzählungen wie Listen, Tupeln und Dictionaries einzeln zu verarbeiten.
Was ist ein Iterator?
Ein Iterator ist ein Objekt, das Elemente nacheinander zurückgeben kann. In Python gilt ein Objekt als Iterator, wenn es die folgenden zwei Bedingungen erfüllt:.
- Es besitzt eine
__iter__()
-Methode, die sich selbst zurückgibt. - Es besitzt eine
__next__()
-Methode, die das nächste Element zurückgibt. Es löstStopIteration
aus, wenn keine weiteren Elemente vorhanden sind.
1iterator = iter([1, 2, 3])
2print(next(iterator)) # 1
3print(next(iterator)) # 2
4print(next(iterator)) # 3
5# print(next(iterator)) # StopIteration occurs
- In diesem Code wird die Funktion
iter()
verwendet, um eine Liste in einen Iterator umzuwandeln, und die Funktionnext()
wird genutzt, um jedes Element einzeln abzurufen und anzuzeigen.
Unterschied zu Iterable
Ein Iterable ist ein Objekt, das die __iter__()
-Methode implementiert und in einer for
-Schleife verwendet werden kann. Listen und Tupel sind Beispiele für Iterables.
1nums = [10, 20, 30]
2it = iter(nums) # Get an iterator from the iterable
3print(next(it)) # 10
- Dieser Code ist ein Beispiel dafür, wie man aus einem Iterierbaren wie einer Liste einen Iterator erhält und die Elemente der Reihe nach mit
next()
abruft.
Überprüfung:
1from collections.abc import Iterable, Iterator
2
3nums = [10, 20, 30]
4it = iter(nums)
5
6print(isinstance(nums, Iterable)) # True
7print(isinstance(nums, Iterator)) # False
8print(isinstance(it, Iterator)) # True
- Dieser Code bestätigt, dass
nums
ein Iterierbares, aber kein Iterator ist, währendit
, das durchiter(nums)
erhalten wird, ein Iterator ist.
Beziehung zwischen for-Schleifen und Iteratoren
Eine for
-Schleife in Python funktioniert intern wie folgt:.
1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4 try:
5 value = next(iterator)
6 print(value)
7 except StopIteration:
8 break
- Wie gezeigt, verwendet die
for
-Schleife implizit einen Iterator, um die Iteration durchzuführen.
Erstellen eines eigenen Iterators
Sie können einen eigenen Iterator mit einer Klasse erstellen.
1class Countdown:
2 def __init__(self, start):
3 self.current = start
4
5 def __iter__(self):
6 return self
7
8 def __next__(self):
9 if self.current <= 0:
10 raise StopIteration
11 value = self.current
12 self.current -= 1
13 return value
14
15for num in Countdown(3):
16 print(num) # 3, 2, 1
- Dieser Code definiert einen benutzerdefinierten Iterator, der mit der Klasse
Countdown
herunterzählt und mit einerfor
-Schleife die Zahlen von 3 bis 1 ausgibt.
Unterschied zwischen Iteratoren und Generatoren und wann man welche verwendet
Generatoren bieten eine ähnliche Funktionalität wie Iteratoren. Sie ermöglichen es, Iteratoren auf prägnantere Weise zu definieren.
1def countdown(n):
2 while n > 0:
3 yield n
4 n -= 1
5
6for i in countdown(3):
7 print(i) # 3, 2, 1
- Dieser Code definiert eine Generatorfunktion, die mit
yield
herunterzählt und mittels einerfor
-Schleife die Zahlen von 3 bis 1 ausgibt.
Unterschiede zwischen Iteratoren (Klasse) und Generatoren (Funktion)
Es gibt folgende Unterschiede zwischen Iteratoren (Klassen) und Generatoren (Funktionen):.
Eigenschaft | Iterator (Klasse) | Generator (Funktion) |
---|---|---|
Definition | __iter__() + __next__() |
Funktion mit yield |
Zustandsverwaltung | Manuelles Attribut-Handling erforderlich | Verwaltet Zustand automatisch |
Lesbarkeit | Kann komplex werden | Einfach und klar |
-
Unterschied in der Definition Ein Iterator wird durch das manuelle Schreiben von zwei Methoden definiert:
__iter__()
und__next__()
. Im Gegensatz dazu ist ein Generator einfach eine Funktion, die das Schlüsselwortyield
verwendet; das macht den Code deutlich einfacher. -
Unterschied in der Zustandsverwaltung Bei einem Iterator müssen Sie den aktuellen Zustand und Fortschritt manuell mit Variablen verwalten. Generatoren hingegen behalten ihren Zustand intern in Python automatisch bei, was den manuellen Aufwand reduziert.
-
Lesbarkeit des Codes Iteratoren können komplex werden, da sie mehrere Methoden und eine manuelle Zustandsverwaltung erfordern. Im Gegensatz dazu verwenden Generatoren eine einfache Syntax, wodurch sie auch für Anfänger leichter verständlich sind.
Standardbibliothek für die Verwendung von Iteratoren: itertools
itertools
, eine Standardbibliothek von Python, bietet leistungsstarke Werkzeuge zum Arbeiten mit Iteratoren.
1import itertools
2
3for x in itertools.count(10, 2): # 10, 12, 14, ...
4 if x > 20:
5 break
6 print(x)
- Sie enthält außerdem viele weitere Funktionen wie
cycle
,repeat
,chain
,islice
undtee
.
Anwendungsfälle für Iteratoren
Anwendungsfälle für Iteratoren umfassen Folgendes:.
- Verarbeitung von Dateizeilen: Zeilen einzeln aus einer Datei als Iterator lesen.
- Speichereffiziente Verarbeitung: Große Datenmengen sequentiell verarbeiten.
- Darstellung unendlicher Sequenzen: Verwenden Sie Funktionen wie
itertools.count()
.
Zusammenfassung
- Ein Iterator ist ein Objekt, das den nächsten Wert nacheinander abrufen kann.
- Man kann einen eigenen Iterator erstellen, indem man
__iter__()
und__next__()
definiert. - Sie werden automatisch durch
for
-Schleifen oder dienext()
-Funktion verarbeitet. - Die Verwendung von Generatoren oder
itertools
ermöglicht eine effizientere Verarbeitung.
Durch die Verwendung von Iteratoren können große Datenmengen speichereffizient und sequenziell verarbeitet werden. Dies ermöglicht eine kontrollierte Zustandsverwaltung und eine verbesserte Programmausführung.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.