🔁 Generatoren in Python – Elegante Iteratoren mit yield#
🧠 Was ist ein Generator?#
Ein Generator ist eine spezielle Funktion, die Werte nacheinander liefert – nicht auf einmal, sondern Stück für Stück, jeweils bei Bedarf.
Das funktioniert mit dem yield-Schlüsselwort statt return.
🔁 Generatoren vs. normale Funktionen#
Normale Funktion:
def quadrate_liste(n):
return [x * x for x in range(n)]
→ Gibt sofort alle Werte auf einmal zurück (z. B. Liste mit 1000 Einträgen)
Alternative Generator:
def quadrate_generator(n):
for x in range(n):
yield x * x
→ Gibt die Werte einen nach dem anderen aus – auf Abruf
🔧 Wie funktioniert yield
?#
Beim ersten Aufruf: Funktion startet bis zum ersten yield
Danach: sie merkt sich ihren Zustand
Beim nächsten next(): sie macht genau dort weiter
📦 Warum Generatoren?#
Vorteil |
Erklärung |
---|---|
🧠 Speichersparend |
Große Datenmengen werden nicht im Voraus erzeugt |
🔁 Wiederverwendbar |
Sehr elegant in for-Schleifen nutzbar |
🚀 Effizient |
Besonders gut für Datenströme, Dateien, Streams |
🧪 Weitere Beispiele#
🔹 Zählergenerator:#
def zaehler(start, ende):
while start <= ende:
yield start
start += 1
🔹 Unendlicher Generator:#
def unendlich_zaehler():
n = 1
while True:
yield n
n += 1
🔹 Zeilen einer Datei (vereinfacht)#
def zeilen_lesen(dateiname):
with open(dateiname, "r") as f:
for zeile in f:
yield zeile.strip()
🧪 Übungsaufgabe#
Erstelle einen eigenen Generator welcher nur Primzahlen liefert.