Yield ist einfach ein Generator Der Generator ist eine solche Funktion, die sich die Position im Funktionskörper merkt, als sie das letzte Mal zurückgegeben wurde. Der zweite (oder n-te) Aufruf einer Generatorfunktion springt in die Mitte der Funktion und lässt alle lokalen Variablen gegenüber dem vorherigen Aufruf unverändert.
Der Generator ist eine Funktion
Alle Parameter der Funktion bleiben erhalten
Wenn diese Funktion zum zweiten Mal aufgerufen wird
Die verwendeten Parameter sind vom vorherigen Zeitpunkt beibehalten Der .
-Generator „merkt“ sich auch seinen Daten-
-Statusim Flusskontrollkonstruktor . Der Generator „merkt“ sich auch seine Position innerhalb des Flusskontrollkonstrukts (in der imperativen Programmierung ist dieses Konstrukt nicht nur ein Datenwert). Kontinuität ist immer noch relativ allgemein, da Sie damit beliebig zwischen Ausführungsrahmen springen können, ohne immer zum Kontext des unmittelbaren Aufrufers zurückzukehren (wie bei Generatoren).
Der Funktionsmechanismus des Ertragsgenerators
Wenn Sie den Generator nach einer Zahl fragen, wird der Generator ausgeführt, bis die Ertragsangabe erscheint. Der Generator gibt Ihnen die Ertragsparameter und dann die Generator Es läuft nicht weiter. Wenn Sie ihn nach der nächsten Nummer fragen, beginnt er vom letzten Zustand aus zu laufen, bis die Yield-Anweisung erscheint, gibt Ihnen die Parameter und stoppt dann. Wiederholen Sie dies, bis die Funktion beendet wird.
Beispiel: Python Permutation, Kombinationsgenerator
#Vollständige Permutation generieren
def perm(items, n=None): if n is None: n = len(items) for i in range(len(items)): v = items[i:i+1] if n == 1: yield v else: rest = items[:i] + items[i+1:] for p in perm(rest, n-1): yield v + p
#Kombination generieren
def comb(items, n=None): if n is None: n = len(items) for i in range(len(items)): v = items[i:i+1] if n == 1: yield v else: rest = items[i+1:] for c in comb(rest, n-1): yield v + c a = perm('abc') for b in a: print b break print '-'*20 for b in a: print b
Die Ergebnisse sind wie folgt:
102 pvopf006 ~/test> ./generator.py
abc
----------- -- -------
acb
bac
bca
cab
cba
Sie können es sehen. An diesem Punkt wird der Generator nach der ersten Schleifenunterbrechung nicht weiter ausgeführt und die zweite Schleife wird nach der ersten Schleife
ausgeführtDas obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Yield-Nutzung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!