Sendefunktion in Python-Generatoren

Preet Sanghavi 21 Juni 2023
  1. Übersicht Generatoren
  2. Verwenden Sie send() in Python-Generatoren
Sendefunktion in Python-Generatoren

In diesem Tutorial lernen Sie, wie Sie die Funktion send() des Generators in Python verwenden.

Übersicht Generatoren

Sie können eine Funktion erstellen, die sich wie ein Iterator verhält und in einer for-Schleife über Python-Generatorfunktionen verwendet werden kann. Zum Beispiel werden wir verschiedene Implementierungen einer Methode namens first_n() vergleichen, die die ersten n nicht negativen ganzen Zahlen darstellt.

Da n eine riesige Zahl ist, gehen wir davon aus, dass jede Ganzzahl viel Speicherplatz benötigt – sagen wir, 10 Megabyte pro Zahl – um diesen Vergleich anzustellen.

Denken Sie daran, dass sie im wirklichen Leben nicht viel Platz einnehmen, es sei denn, sie sind riesige ganze Zahlen. So können Sie beispielsweise 128 Bytes verwenden, um eine 309-stellige Ganzzahl darzustellen.

Betrachten wir das folgende Beispiel.

def first_n(n):
    num, nums = 0, []
    while num < n:
        nums.append(num)
        num += 1
    return nums


sum_of_first_n = sum(first_n(1000000))

Der obige Code erstellt eine Summationsfunktion, die Werte bis zu den ersten n Zahlen summiert. Das einzige Problem ist, dass es viel Speicher aufbaut.

Denken Sie daran, dass wir es uns nicht leisten können, ganze Zahlen von bis zu 10 Megabyte in unserem Speicher zu halten. Um es zu lösen, verwenden wir Generatoren in Python.

Ein Generator hilft beim Erstellen von Iteratoren. Wir können es über den folgenden Codeblock verstehen.

def first_n(n):
    num, nums = 0, []
    while num < n:
        yield num
        num += 1
    return nums


print(sum(first_n(1000000)))

Ausgang:

499999500000

Der obige Code-Fence verwendet das Speicher-Use-Case-Feature der Iterator-Ausführung.

Verwenden Sie send() in Python-Generatoren

Die send()-Methode für Generator-Iteratoren ist nützlich für Generatoren. Seit der Python-Version 2.5 ist diese in PEP 342 spezifizierte Funktion zugänglich.

Der Generator wird mit der Methode send() neu gestartet, die auch einen Wert sendet, mit dem die nachfolgende Ausbeute gestartet wird. Schließlich gibt der Prozess (die Methode) den vom Generator gelieferten neuen Wert zurück.

Die Methode send() ähnelt der Verwendung von next(), wenn kein Wert vorhanden ist. None ist ein weiterer möglicher Wert für dieses Verfahren. In beiden Fällen leitet der Generator seine Operation an die erste return-Anweisung weiter.

Lassen Sie uns die Funktion send() im folgenden Code untersuchen.

def numberGenerator(n):
    number = yield
    while number < n:
        yield number
        number += 1


g = numberGenerator(10)
next(g)
print(g.send(5))

Ausgang:

5

Wie wir im obigen Codeblock sehen können, senden wir in der letzten Zeile den Wert 5 innerhalb unserer Variablen g, um sicherzustellen, dass der Generator die letzte Eingabe als 5 betrachtet.

Die Funktion send() sendet den letzten akzeptablen Wert an die Generatorvariable, die sie als letzte Eingabe verwenden kann. Damit haben wir verstanden, wie Generatoren funktionieren und welche Bedeutung die send()-Funktion eines Generators hat.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Verwandter Artikel - Python Function

Verwandter Artikel - Python Generator