0Pricing
Python Academy · Lektion

Generatorfunktionen

Mit yield verzögert Werte erzeugen

Generatorfunktionen ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein Generator?

Eine Generatorfunktion sieht wie eine normale Funktion aus, verwendet aber yield anstelle von (oder zusätzlich zu) return. Ihr Aufruf führt den Funktionskörper nicht aus, sondern gibt ein Generatorobjekt zurück, das ein Iterator ist.

def gen():
    yield 1
    yield 2
    yield 3

g = gen()
print(type(g).__name__)
print(list(g))

yield unterbricht die Ausführung

Jedes Mal, wenn Sie next() aufrufen, wird die Funktion bis zum nächsten yield ausgeführt, gibt diesen Wert zurück und friert ihren Zustand ein. Der nächste Aufruf setzt die Ausführung direkt nach dem yield fort.

def steps():
    print('start')
    yield 'a'
    print('resumed')
    yield 'b'

g = steps()
print(next(g))
print(next(g))

Eine Schleife über einen Generator

Da ein Generator ein Iterator ist, steuert eine for-Schleife ihn automatisch und endet, wenn die Funktion beendet wird (wodurch intern StopIteration ausgelöst wird).

def countdown(n):
    while n > 0:
        yield n
        n -= 1

for x in countdown(4):
    print(x)

Verzögerte Auswertung

Generatoren arbeiten verzögert: Werte werden erst erzeugt, wenn sie angefordert werden. Dadurch können Sie sehr große oder unendliche Folgen modellieren, ohne viel Speicher zu verwenden.

def naturals():
    n = 1
    while True:
        yield n
        n += 1

g = naturals()
print(next(g), next(g), next(g))

Zustand zwischen yield-Stellen

Lokale Variablen behalten ihre Werte zwischen den yield-Stellen. Ein Generator merkt sich ganz natürlich, an welcher Stelle er aufgehört hat, ohne dass Sie einen Index manuell verwalten müssen.

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

g = fib()
print([next(g) for _ in range(7)])

Generatoren im Vergleich zum Erstellen einer Liste

Eine normale Funktion erstellt die gesamte Liste auf einmal und gibt sie zurück. Ein Generator liefert Elemente bei Bedarf. Verwenden Sie einen Generator, wenn die Folge groß ist oder Sie möglicherweise frühzeitig abbrechen.

def squares_list(n):
    result = []
    for i in range(n):
        result.append(i * i)
    return result

def squares_gen(n):
    for i in range(n):
        yield i * i

print(squares_list(5))
print(list(squares_gen(5)))

Frühzeitig anhalten

Da die Werte verzögert erzeugt werden, können Sie eine Schleife mit break verlassen. Der Generator berechnet den Rest dann einfach nicht mehr.

def naturals():
    n = 1
    while True:
        print('producing', n)
        yield n
        n += 1

for x in naturals():
    if x > 3:
        break
    print('got', x)

return in einem Generator

Ein einzelnes return in einem Generator beendet ihn einfach (und löst StopIteration aus). Jeder zurückgegebene Wert wird zum Attribut value der Ausnahme, das die meisten Schleifen ignorieren.

def up_to(stop):
    i = 0
    while True:
        if i >= stop:
            return
        yield i
        i += 1

print(list(up_to(4)))

Generatoren sind nur einmal verwendbar

Wie alle Iteratoren wird ein Generator nur einmal durchlaufen. Nach dem Ende liefert er keine Werte mehr. Rufen Sie die Funktion erneut auf, um einen neuen Generator zu erhalten.

def gen():
    yield 1
    yield 2

g = gen()
print(list(g))
print(list(g))
print(list(gen()))

Filtern mit Generatoren

Mit Generatoren lassen sich übersichtliche Datenpipelines erstellen. Hier geben wir nur die geraden Zahlen aus, eine nach der anderen.

def evens(numbers):
    for n in numbers:
        if n % 2 == 0:
            yield n

print(list(evens(range(10))))

Generatoren verketten

Ein Generator kann einen anderen Generator verarbeiten und so eine mehrstufige Pipeline bilden, in der jede Stufe verzögert arbeitet.

def numbers(n):
    for i in range(n):
        yield i

def doubled(src):
    for x in src:
        yield x * 2

print(list(doubled(numbers(5))))

Kurzer Test

Testen Sie Ihr Verständnis von Generatorfunktionen.

Zusammenfassung

Sie haben Generatorfunktionen kennengelernt:

  • yield unterbricht und setzt die Ausführung fort, wobei der lokale Zustand erhalten bleibt.
  • Der Aufruf der Funktion gibt ein verzögert arbeitendes Generatorobjekt zurück.
  • Sie gehen sparsam mit Speicher um und eignen sich hervorragend für Pipelines und unendliche Datenströme.
  • Wie jeder Iterator sind sie nur einmal verwendbar.

Als Nächstes folgen die noch kompakteren Generatorausdrücke.

Häufig gestellte Fragen

Ist die Lektion „Generatorfunktionen“ kostenlos?

Ja — der vollständige Text von „Generatorfunktionen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Generatorfunktionen“?

Mit yield verzögert Werte erzeugen Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Generatorfunktionen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Iterator-Protokoll
  2. Generatorfunktionen
  3. Generatorausdrücke
  4. yield from und Delegation
← Zurück zu Python Academy