Iteratoren in Python

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öst StopIteration 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 Funktion next() 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ährend it, das durch iter(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 einer for-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 einer for-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üsselwort yield 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 und tee.

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 die next()-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.

YouTube Video