Heim >Backend-Entwicklung >Python-Tutorial >Python-detaillierte Erklärung der Yield-Nutzung

Python-detaillierte Erklärung der Yield-Nutzung

高洛峰
高洛峰Original
2016-10-19 11:43:561341Durchsuche

Yield ist einfach ein Generator. Ein Generator ist eine Funktion, die sich die Position im Funktionskörper merkt, als sie zuletzt 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 Mal beibehalten.

Der Generator „merkt“ sich auch seinen Datenstatus im Flusskontrollkonstruktor

Der Generator „merkt“ sich nicht nur seinen Datenstatus. 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 Zahl 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-Permutations- und 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

#Kombinationen 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

Wie Sie sehen können, in der erste Nach der Schleifenunterbrechung wird der Generator nicht weiter ausgeführt und die zweite Schleife wird nach der ersten Schleife ausgeführt


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
Vorheriger Artikel:Python-SemaphorNächster Artikel:Python-Semaphor