Grundlagen von Generatoren
Was ist ein Generator?
Ein Generator (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 werden mit dem Schlüsselwort yield
definiert, das die Ausführung der Funktion pausiert und einen Wert zurückgibt.
Grundlegende Generator-Syntax
def simple_generator():
yield 1
yield 2
yield 3
## Creating a generator object
gen = simple_generator()
## Iterating through generator values
for value in gen:
print(value)
Wichtige Eigenschaften von Generatoren
Eigenschaft |
Beschreibung |
Speichereffizienz |
Generiert Werte on-the-fly, was den Speicherverbrauch reduziert |
Lazy Evaluation |
Werte werden nur bei Bedarf erzeugt |
Iteration |
Kann mit for -Schleifen oder der next() -Funktion iteriert werden |
Generatorausdrücke
Generatoren können auch mit Generatorausdrücken (Generator expressions) erstellt werden, die ähnlich wie Listen-Abstraktionen (list comprehensions) sind:
## Generator expression
squared_gen = (x**2 for x in range(5))
## Converting to list
squared_list = list(squared_gen)
print(squared_list) ## [0, 1, 4, 9, 16]
Generator-Arbeitsablauf
graph TD
A[Generator Function Called] --> B[Execution Starts]
B --> C{First yield Statement}
C --> |Pauses Execution| D[Returns Value]
D --> E[Waiting for next() or iteration]
E --> F{Next yield Statement}
F --> |Resumes Execution| G[Returns Next Value]
G --> H[Continues Until StopIteration]
Praktisches Beispiel
def fibonacci_generator(n):
a, b = 0, 1
count = 0
while count < n:
yield a
a, b = b, a + b
count += 1
## Using the Fibonacci generator
for num in fibonacci_generator(6):
print(num)
Wann sollten Generatoren verwendet werden?
- Bei der Verarbeitung großer Datensätze
- Beim Erstellen unendlicher Sequenzen
- Bei der Implementierung benutzerdefinierter Iteratoren
- Zur Reduzierung des Speicheraufwands
Indem Sie Generatoren verstehen, können Sie effizienteren und eleganteren Python-Code schreiben. LabEx empfiehlt, verschiedene Generator-Szenarien zu üben, um diese leistungsstarke Funktion zu meistern.