Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Pythons yield meistern: Generator vs. Return – Ein praktischer Leitfaden

Pythons yield meistern: Generator vs. Return – Ein praktischer Leitfaden

Was ist Python yield?

Das Schlüsselwort yield verhält sich wie return, gibt aber statt eines Werts sofort ein Generator-Objekt zurück, über das iteriert werden kann. Wenn eine Funktion, die yield enthält, aufgerufen wird, pausiert die Ausführung bei der ersten yield-Anweisung und gibt die Kontrolle mit einem Generator an den Aufrufer zurück. Nachfolgende Aufrufe von next() oder eine for-Schleife setzen die Ausführung an dieser Stelle fort und liefern den nächsten Wert.

Wichtigste Erkenntnisse

Syntax

yield ausdruck

Praktisches Beispiel: Einfaches Yield

def test_yield():
    yield "Willkommen bei Guru99 Python Tutorials"

output = test_yield()
print(output)

Ausgabe:

<generator object test_yield at 0x00000028265EB9A8>

Das Generator-Objekt hält den yielded Wert. Um darauf zuzugreifen, iterieren Sie:

for value in output:
    print(value)

Ausgabe:

Willkommen bei Guru99 Python Tutorials

Generatoren erklärt

Eine Generator-Funktion ist eine spezielle Funktion, die ein iterierbares Generator-Objekt zurückgibt. Im Gegensatz zu regulären Funktionen, die einen einzelnen Wert zurückgeben, liefert ein Generator eine Sequenz von Werten lazy – er produziert jeden Wert erst dann, wenn er angefordert wird.

Generator-Funktion erstellen

def generator_beispiel():
    yield "H"
    yield "E"
    yield "L"
    yield "L"
    yield "O"

for buchstabe in generator_beispiel():
    print(buchstabe)

Ausgabe:

H
E
L
L
O

Normale Funktion vs. Generator-Funktion

Betrachten Sie das folgende Funktionspaar:

# Normale Funktion
def normale_test():
    return "Hello World"

# Generator-Funktion
def generator_test():
    yield "Hello World"

print(normale_test())      # → Hello World
print(generator_test())    # → <generator object generator_test>

Normale Funktionen enden bei return; Generatoren pausieren bei yield und geben die Kontrolle mit einem Generator-Objekt an den Aufrufer zurück.

Generator konsumieren

Sie können Werte aus einem Generator ziehen mit:

Beispiel: Gerade Zahlen

def gerade_zahlen(n):
    for x in range(n):
        if x % 2 == 0:
            yield x

print(list(gerade_zahlen(10)))  # → [0, 2, 4, 6, 8]

for-in verwenden

for num in gerade_zahlen(10):
    print(num)

Ausgabe:

0
2
4
6
8

next() verwenden

gen = gerade_zahlen(10)
for _ in range(6):
    try:
        print(next(gen))
    except StopIteration:
        print("Ende des Generators")

Ausgabe:

0
2
4
6
8
Ende des Generators

Generatoren sind einmalig nutzbar

Einmal vollständig iteriert, ist ein Generator erschöpft. Erneutiges Iterieren liefert nichts, es sei denn, die Generator-Funktion wird erneut aufgerufen.

gen = gerade_zahlen(10)
for num in gen:
    print(num)
print(list(gen))  # → []

Yield in Aktion: Fibonacci-Reihe

def fibonacci_reihe(limit):
    a, b = 0, 1
    count = 0
    while count < limit:
        yield a
        a, b = b, a + b
        count += 1

fib = fibonacci_reihe(7)
for num in fib:
    print(num)

Ausgabe:

0
1
1
2
3
5
8

Funktion aufrufen, die yielded

Im Folgenden quadrieren wir Zahlen mit einer Hilfsfunktion und einem Generator, der jedes Ergebnis yielded.

def quadrat(n):
    return n * n

def quadrat_bereich(n):
    for i in range(n):
        yield quadrat(i)

for value in quadrat_bereich(10):
    print(value)

Ausgabe:

0
1
4
9
16
25
36
49
64
81

Wann yield statt return verwenden

Yield vs. Return – Kurze Referenz

YieldReturn
Gibt einen Generator zurück; Ausführung wird bei Iteration fortgesetzt.Beendet Funktion; gibt einzelnen Wert sofort zurück.
Pausiert bei jedem yield, spart Speicher.Allokiert Speicher für den Rückgabewert.
Ideal für große oder unendliche Sequenzen.Geeignet für kleine, diskrete Ergebnisse.
Ausführungszeit schneller für große Datensätze.Kann Overhead bei riesigen Daten verursachen.

Wichtigste Erkenntnisse

Python

  1. Python Lambda-Funktionen: Praxisleitfaden zu anonymen Funktionen
  2. Python Generatoren: Effiziente Iteration und fortgeschrittene Anwendungsfälle
  3. Python Closures erklärt: Wie verschachtelte Funktionen Variablen erfassen
  4. Python Decorators meistern: Funktionen mit Experten-Techniken erweitern
  5. Pythons strip()-Methode meistern: Umfassender Leitfaden & Praxisbeispiele
  6. Python len(): Praktischer Leitfaden zur Messung von Objektlängen
  7. Python Lambda-Funktionen meistern: Praxisbeispiele & Best Practices
  8. Python round()-Funktion erklärt mit praktischen Beispielen
  9. Pythons map()-Funktion meistern: Syntax, Beispiele und Best Practices
  10. Python Counter in collections: Effizientes Zählen, Aktualisieren und arithmetische Operationen