Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Analyse der Rolle und Verwendung des Schlüsselworts yield in Python

Eine kurze Analyse der Rolle und Verwendung des Schlüsselworts yield in Python

WBOY
WBOYOriginal
2016-12-05 13:27:181373Durchsuche

Vorwort

Um zu verstehen, was Ertrag ist, müssen Sie zunächst verstehen, was ein Generator (generator) ist. Bevor wir über Generatoren sprechen, sprechen wir über Iteratoren (iterator). Sie können jedes Element einzeln lesen, was als Iteration (list) bezeichnet wird. iteration

>>> mylist = [1, 2, 3]
>>> for i in mylist :
... print(i)
1
2
3

ist ein iterierbares Objekt. Wenn Sie ein Listenverständnis zum Erstellen einer Liste verwenden, erstellen Sie ein iterierbares Objekt: mylist

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist :
... print(i)
0
1
4
Sie können „

“ verwenden, um iterierbare Objekte zu bedienen, wie zum Beispiel: for··· in ···, list, string Diese iterativen Objekte sind für uns sehr praktisch, da Sie sie nach Belieben wiederholt lesen können. . Sie müssen jedoch alle Elemente im Voraus im Speicher speichern, und wenn diese Objekte viele Elemente enthalten, ist nicht jedes Element für Sie nützlich. files

Der Generator ist ebenfalls ein iterierbares Objekt, aber Sie können ihn nur einmal lesen, da er nicht alle Werte im Speicher speichert, sondern Werte dynamisch generiert:

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator :
... print(i)
0
1
4
Es sieht so aus, als gäbe es keinen Unterschied, außer dass [] durch () ersetzt wird. Sie können

jedoch nicht erneut verwenden, da der Generator nur einmal iteriert werden kann: Zuerst berechnet er 0, dann berechnet er weiter 1 und dann 4, einer nach dem anderen ...for i in mygenerator

ist ein Schlüsselwort, das yield ähnelt, außer dass diese Funktion einen Generator zurückgibt. return

>>> def createGenerator() :
... mylist = range(3)
... for i in mylist :
...  yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...  print(i)
0
1
4
Dieses Beispiel selbst ist bedeutungslos, aber es zeigt deutlich, dass die Funktion eine Reihe von Werten zurückgibt, die nur einmal gelesen werden können. Um den Ertrag zu beherrschen, müssen Sie Folgendes verstehen: Wenn Sie die Generatorfunktion aufrufen, Wie im obigen Beispiel

führt das Programm den Code im Funktionskörper nicht aus, sondern gibt nur das Generatorobjekt zurück. Diese Methode ist recht subtil. Der Code im Funktionskörper wird erst bei jeder Schleifeniteration (for) des Generators ausgeführt. createGenerator()

In der ersten Iteration wird Ihre Funktion ausgeführt, wobei das Schlüsselwort

von Anfang an erreicht wird und dann der Wert nach yield als Rückgabewert der ersten Iteration zurückgegeben wird. Dann wird diese Funktion jedes Mal ausgeführt , wird die Ausführung fortgesetzt. Geben Sie beim nächsten Mal in der Schleife, die Sie in der Funktion definieren, diesen Wert erneut zurück, bis nichts mehr zurückgegeben werden kann. yield

Wenn das Schlüsselwort

nicht im Generator definiert ist, gilt der Generator als leer. Dies kann passieren, weil die Schleife zu Ende geht oder die if/else-Bedingungen nicht erfüllt sind. yield

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für alle beim Erlernen oder Verwenden von Python hilfreich sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.

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