Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Yield-Nutzung in Python

Detaillierte Erläuterung der Yield-Nutzung in Python

高洛峰
高洛峰Original
2017-03-17 16:57:082574Durchsuche

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-

-Status

im 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ührt

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn