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.
Verwandter Artikel - Python Function
- Beenden Sie eine Funktion in Python
- Optionale Argumente in Python
- Argumente in der Funktion main() in Python
- Eingebaute Identitätsfunktion in Python
- Erstklassige Funktionen in Python
- Funktionssignatur erhalten