Heim >Backend-Entwicklung >Python-Tutorial >Eine kurze Analyse der Rolle und Verwendung des Schlüsselworts yield in Python
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 4Sie 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
>>> mygenerator = (x*x for x in range(3)) >>> for i in mygenerator : ... print(i) 0 1 4Es 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 4Dieses 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()
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
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.