Zum Hauptinhalt springen

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

  • return beendet
  • yield liefert 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

Mini-QuizWas macht yield?

yield sitzt! Als Nächstes: Generator Expressions.