0Pricing
Python Academy · Lektion

Das Schlüsselwort yield

Schreiben Sie mit yield Generatorfunktionen für benutzerdefinierte Iteratoren.

Das Schlüsselwort yield ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Einführung

Generatorfunktionen verwenden yield, um eine Folge von Werten verzögert zu erzeugen, und pausieren die Ausführung zwischen den einzelnen yield-Aufrufen.

Was ist yield?

Eine Funktion mit yield ist eine Generatorfunktion. Jeder Aufruf von next() setzt die Ausführung ab dem letzten yield fort.
def count_up(n):
    for i in range(n):
        yield i
for x in count_up(3):
    print(x)

Generatorfunktion im Vergleich zur normalen Funktion

Der Aufruf einer Generatorfunktion gibt ein Generatorobjekt zurück – es wird noch kein Code ausgeführt. Der Code läuft erst während der Iteration.
def gen():
    print('start')
    yield 1
    print('middle')
    yield 2
g = gen()  # no print yet
print(next(g))  # 'start', then 1

Unendlicher Generator

def naturals(n=0): while True: yield n; n+=1 ist eine unendliche Sequenz. Verwenden Sie sie mit islice oder break.
def naturals(n=0):
    while True:
        yield n
        n += 1
import itertools
print(list(itertools.islice(naturals(), 5)))

yield from

yield from sub_gen() delegiert an einen Untergenerator und leitet alle Werte weiter. Das entspricht for x in sub: yield x.
def chain(*iters):
    for it in iters:
        yield from it
print(list(chain([1,2], [3,4], [5])))

Werte mit send() senden

gen.send(value) setzt den Generator fort UND übergibt einen Wert, der zum Ergebnis des yield-Ausdrucks wird.
def accumulator():
    total = 0
    while True:
        n = yield total
        if n is None: break
        total += n
g = accumulator()
next(g)  # prime
print(g.send(10))
print(g.send(5))

Generatorzustand

Ein Generator pausiert bei jedem yield und behält seine lokalen Variablen zwischen den Aufrufen bei – ein natürliches Coroutine-Verhalten.
def stateful():
    seen = set()
    while True:
        item = yield
        seen.add(item)
        yield len(seen)
g = stateful()
next(g); g.send('a'); print(next(g)); g.send('b'); print(next(g))

Einen Generator schließen

gen.close() löst innerhalb des Generators GeneratorExit aus. Verwenden Sie innerhalb des Generators try/finally für Aufräumarbeiten.
def resource_gen():
    try:
        while True:
            yield
    finally:
        print('cleaned up')
g = resource_gen()
next(g)
g.close()

StopIteration und return

return value in einem Generator legt das Attribut value der StopIteration-Ausnahme fest. yield from verwendet es, um diesen Wert abzurufen.
def gen_with_return():
    yield 1
    yield 2
    return 'done'
g = gen_with_return()
try:
    while True: print(next(g))
except StopIteration as e:
    print('returned:', e.value)

Fibonacci-Generator

Generatoren eignen sich hervorragend für unendliche mathematische Folgen: yield a; a, b = b, a+b
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
import itertools
print(list(itertools.islice(fibonacci(), 10)))

Generatoren im Vergleich zu Klassen mit __iter__

Generatoren sind einfacher, als eine Klasse mit __iter__ und __next__ zu schreiben. Verwenden Sie Generatoren für unkomplizierte Sequenzen.
# Generator is simpler than:
# class Counter:
#     def __iter__(self): return self
#     def __next__(self): ...
print('generators simplify iterators')

Wissenscheck

Was bewirkt yield from sub() in einer Generatorfunktion?

Zusammenfassung

yield pausiert eine Generatorfunktion. Generatorfunktionen geben ein Generatorobjekt zurück. yield from delegiert an Untergeneratoren. send() übergibt Werte. close() löst die Bereinigung aus.

Weiter

Ausgezeichnet! Fahren Sie mit der nächsten Lektion fort, um Ihre Fähigkeiten zu vertiefen.

Häufig gestellte Fragen

Ist die Lektion „Das Schlüsselwort yield“ kostenlos?

Ja — der vollständige Text von „Das Schlüsselwort yield“ 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 „Das Schlüsselwort yield“?

Schreiben Sie mit yield Generatorfunktionen für benutzerdefinierte Iteratoren. 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 4 von 4.

Wie lange dauert die Lektion „Das Schlüsselwort yield“?

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. List-Comprehensions
  2. Set- und Dict-Comprehensions
  3. Generatorausdrücke
  4. Das Schlüsselwort yield
← Zurück zu Python Academy