Grundlagen von Generatoren
Was ist ein Generator?
Ein Generator in Python ist eine spezielle Art von Funktion, die ein Iterator-Objekt zurückgibt. Dadurch können Sie eine Sequenz von Werten im Laufe der Zeit generieren, anstatt sie alle auf einmal zu berechnen und im Speicher zu speichern. Generatoren bieten eine speichereffiziente Möglichkeit, mit großen Datensätzen oder unendlichen Sequenzen zu arbeiten.
Erstellen von Generatoren
Generatorfunktionen
Generatoren werden mit dem Schlüsselwort yield
anstelle von return
erstellt. Wenn eine Generatorfunktion aufgerufen wird, gibt sie ein Generatorobjekt zurück, ohne die Ausführung der Funktion tatsächlich zu starten.
def simple_generator():
yield 1
yield 2
yield 3
## Create generator object
gen = simple_generator()
Generatorausdrücke
Ähnlich wie Listen-Abstraktionen (list comprehensions) bieten Generatorausdrücke eine kompakte Möglichkeit, Generatoren zu erstellen:
## Generator expression
squared_gen = (x**2 for x in range(5))
Verhalten von Generatoren
Lazy Evaluation
Generatoren verwenden die Lazy-Evaluation (faulige Auswertung), was bedeutet, dass Werte erst bei Bedarf generiert werden:
graph LR
A[Generator Created] --> B[Value Generated Only When Requested]
B --> C[Next Value Generated on Next Iteration]
Iterationsmechanismus
Generatoren können mit next()
oder in einer for
-Schleife iteriert werden:
def countdown(n):
while n > 0:
yield n
n -= 1
## Iteration methods
for num in countdown(3):
print(num)
## Using next()
gen = countdown(3)
print(next(gen)) ## 3
print(next(gen)) ## 2
Wichtige Eigenschaften
Merkmal |
Beschreibung |
Speichereffizienz |
Generiert Werte nacheinander |
Iteration |
Kann nur einmal iteriert werden |
Zustandserhaltung |
Merkt sich seinen Zustand zwischen Aufrufen |
Anwendungsfälle
- Arbeiten mit großen Datensätzen
- Unendliche Sequenzen
- Pipeline-Verarbeitung
- Umgebungen mit begrenzten Speicherressourcen
Fortgeschrittene Generator-Techniken
Generatorverkettung
def generator1():
yield from range(3)
def generator2():
yield from range(3, 6)
## Combining generators
combined = list(generator1()) + list(generator2())
print(combined) ## [0, 1, 2, 3, 4, 5]
Leistungsüberlegungen
Generatoren sind besonders nützlich in LabEx-Umgebungen, in denen die Optimierung der Ressourcen von entscheidender Bedeutung ist. Sie bieten eine leichte Alternative zu traditionellen listenbasierten Ansätzen, insbesondere bei der Verarbeitung großer oder komplexer Datentransformationen.