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

WBOY
Freigeben: 2016-12-05 13:27:18
Original
1372 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren
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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!