Generatoren mit yield
Beispiel
def zahlen_bis(n: int):
i = 1
while i <= n:
yield i
i = i + 1
for z in zahlen_bis(3):
print(z)
yield pausiert die Funktion und liefert einen Wert – beim nächsten Mal geht es weiter.
Unterschied return
returnbeendetyieldliefert und kann fortgesetzt werden
Rate mal!
g = zahlen_bis(2)
print(next(g), next(g))
Auflösung
1 2
Probiere es selbst
Experiment 1
Generator 1..5.
Experiment 2
Gerade Zahlen yielden.
Experiment 3
next manuell zweimal.
Übungen
Level 1
Generator hallo dreimal (yield "hi").
Level 2
countdown(n).
Level 3
Zeilen aus Liste yielden, die "error" enthalten.
Level-2-Lösung
def countdown(n: int):
while n > 0:
yield n
n = n - 1
print(list(countdown(3)))
Mini-Quiz
yield sitzt! Als Nächstes: Generator Expressions.