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
“ 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 4
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
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.