Heim  >  Artikel  >  Backend-Entwicklung  >  Was bedeutet Python-Ertrag?

Was bedeutet Python-Ertrag?

(*-*)浩
(*-*)浩Original
2019-06-27 10:10:5112369Durchsuche

Ich bin auf das Schlüsselwort yield gestoßen, als ich den Python-Quellcode anderer Leute gelesen habe. Hier ist eine Zusammenfassung:

Was bedeutet Python-Ertrag?

In der üblichen for...in...-Schleife folgt auf in ein Array. Dieses Array ist ein iterierbares Objekt, ähnlich wie verknüpfte Listen, Zeichenfolgen und Dateien. Es kann mylist= [1, 2, 3] oder mylist = [x*x für x in range(3)] sein. Der Nachteil besteht darin, dass sich alle Daten im Speicher befinden und bei großen Datenmengen viel Speicher verbraucht wird. (Empfohlenes Lernen: Python-Video-Tutorial)

Der Generator kann iteriert, aber nur einmal gelesen werden. Denn es entsteht, wenn es genutzt wird. Beispiel: mygenerator = (x*x für x in range(3)). Beachten Sie, dass hier () verwendet wird, es kein Array ist und das obige Beispiel [] ist.

Der Schlüssel zu meinem Verständnis davon, dass ein Generator iterieren kann, ist, dass er über eine next()-Methode verfügt. Das Arbeitsprinzip besteht darin, die next()-Methode wiederholt aufzurufen, bis eine Ausnahme abgefangen wird. Sie können zum Testen den oben genannten Mygenerator verwenden.

Die Funktion mit yield ist keine gewöhnliche Funktion mehr, sondern ein Generator, der zur Iteration verwendet werden kann. Das Funktionsprinzip ist das gleiche wie oben.

Yield ist ein Schlüsselwort, das Return ähnelt. Wenn Yield während einer Iteration auftritt, wird der Wert nach Yield zurückgegeben. Der Punkt ist: In der nächsten Iteration beginnt die Ausführung mit dem Code nach der in der vorherigen Iteration gefundenen Ausbeute.

Kurzes Verständnis: Yield bedeutet, dass return einen Wert zurückgibt und sich die zurückgegebene Position merkt. Die nächste Iteration beginnt an dieser Position.

Funktionen mit yield werden nicht nur in For-Schleifen verwendet, sondern können auch als Parameter einer Funktion verwendet werden, sofern die Parameter dieser Funktion Iterationsparameter zulassen. Beispielsweise ist der Prototyp der Funktion array.extend array.extend(iterable).

Der Unterschied zwischen send(msg) und next() besteht darin, dass send Parameter an den Yield-Ausdruck übergeben kann. Die zu diesem Zeitpunkt übergebenen Parameter werden als Wert des Yield-Ausdrucks und als Yield-Parameter verwendet sind die an den Aufrufer zurückgegebenen Werte. ——Mit anderen Worten, send kann den vorherigen Ertragsausdruckswert zwangsweise ändern. Beispielsweise gibt es in der Funktion eine Ertragszuweisung, a

= yield 5. Die erste Iteration hier gibt 5 zurück und a wurde kein Wert zugewiesen. Verwenden Sie in der zweiten Iteration .send(10), dann wird der Wert des Ausdrucks a zwangsweise auf 10 geändert, was ursprünglich None war, dann a=10

send(msg) und next() beide Da sind Rückgabewerte. Ihr Rückgabewert ist der Wert des Ausdrucks nach Yield, wenn die aktuelle Iteration auf Yield trifft. Tatsächlich ist es der Parameter nach Yield in der aktuellen Iteration.

Der erste Aufruf muss next() oder send(None) sein, andernfalls wird ein Fehler gemeldet. Der Grund dafür, dass er nach dem Senden „None“ ist, liegt darin, dass es zu diesem Zeitpunkt keine vorherige Ausbeute gibt (gemäß Artikel 8). ). Es kann davon ausgegangen werden, dass next() send(None) entspricht.

Weitere technische Artikel zum Thema Python finden Sie in der Spalte Python-Tutorial, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonWas bedeutet Python-Ertrag?. 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