In Ordnung, diese riesige Liste wurde endlich in den Speicher eingetragen.
Aber erinnern Sie sich an unsere Schlüsselbegriffe, erinnern Sie sich daran, wie er sagte, eine Liste sei eine iterierbare?
Was war ein Iterable?
Nun, ein Iterable ist jedes Objekt in Python, das wir unter der Haube durchlaufen
können, es hat die Dundar-ed-Methode.
Wenn das Objekt erstellt wird, ermöglicht uns diese Itour, ein iterierbares Objekt zu haben, das iteriert werden
kann, um etwas zu iterieren, oder Iteration ist der Vorgang, ein Element aus einem iterierbaren Objekt zu nehmen, etwas damit zu tun und dann zum
nächsten zu gehen.
Wenn wir Schleifen wie for-Schleifen oder while-Schleifen verwenden, nennen wir das Iteration.
Es ist der Prozess selbst.
Und Generatoren.
Sind eigentlich iterierbar, d. h. alles, was ein Generator ist, ist iterierbar, Sie können über sie iterieren, aber nicht alles,
was ist.
Iterierbar ist beispielsweise ein Generator, ein Bereich ist ein Generator.
Das wird also immer iterierbar sein.
Aber eine Liste ist ein iterierbares, aber kein Generator.
Ein Generator ist also eine Teilmenge einer iterierbaren.
Ich weiß, das sind viele Worte.
Hoffentlich bist du noch bei mir.
Der Unterschied zwischen einem Generator und einem regulären Iterable besteht darin, wie wir sie implementieren.
Lassen Sie mich Ihnen eine allgemeine Methode zum Erstellen eines Generators zeigen.
Lassen Sie uns diesen Code löschen und unseren eigenen Generator definieren und Generatoren sind normalerweise Funktionen, genau wie range eine Funktion
ist. Generatoren werden normalerweise auf diese Weise erstellt.
Sagen wir also Generatorfunktion.
Und diese Generatorfunktion wird eine for-Schleife haben, die wie zuvor über einen Bereich
schleift.
Aber der Unterschied hier, bringen wir den Code zurück, den wir vorher hatten.
Sie wird dies auskommentieren, damit wir die Unterschiede sehen können.
Die Generatorfunktion wird.
Erstellen Sie, sagen wir, diese vielen Elemente.
Aber anstatt wie bei einer regulären Funktion zurückzukehren, verwenden wir ein Schlüsselwort namens
yield.
Und hier werden wir das I so dem Item nachgeben.
Beachten Sie also den Unterschied hier.
Nun, wenn wir wie hier wollen, können wir eine Nummer übergeben.
So, aber anstatt zurückzukehren.
Und wenn wir diese Liste anhängen und all diese Daten erstellen, verwenden wir ILD.
Nun, was bedeutet yield, sehen Sie, dass yield die Funktion anhält und darauf zurückkommt, wenn wir etwas daran tun, was als nächstes aufgerufen
wird und das wir gleich behandeln werden?
Also sagt Yield, hey, pausiere die Funktion, lass einfach nach.
Ich gebe ich und wenn du mir sagst, dass ich wieder weitermachen soll, dann werde ich weitermachen.
Wie können wir dies tun?
Nun, ich kann sagen, für Artikel in der Generatorfunktion werde ich das tun.
Drucken Sie den Artikel.
Nun, hier, was passieren wird, ist, dass wir die Generatorfunktion durchlaufen und sie der
Generatorfunktion übergeben, sagen wir vorerst tausend.
Und wir werden jedes Element in der Generatorfunktion ausgeben, da dies iterierbar ist.
Es wird ausgeführt und es wird eine Schleife ausgeführt und für jedes Element in dieser Nummer, also das ist der Bereich, den wir ergeben
werden, warum?
Es wird also immer wieder Schleifen und Schleifen.
Und wenn wir zurückkommen, wenn wir eine Schleife machen.
Wir werden dies und den Ertrag ausführen.
Kommt zurück und läuft wieder.
Lassen Sie mich Ihnen zeigen, was ich auskommentieren werde, kommentieren Sie dies ebenfalls und klicken Sie einfach hier auf Ron.
Haben Sie gesehen, dass das, was wir hier gerade gemacht haben, ähnlich ist wie hier unten, aber anstatt diese Liste im
Speicher erstellen zu müssen, ging es einfach nacheinander weiter.
Wir haben nur einen Gegenstand im Gedächtnis behalten.
Und wir haben es verwendet, wie wir wollten, in unserem Fall haben wir nur den Artikel gedruckt.
Sehen wir uns dieses Ertrags-Keyword etwas genauer an.
Was macht es eigentlich?
Nehmen wir an, wir wollen dies mit zwei multiplizieren, genau wie wir es hier in unserem ursprünglichen Beispiel mit
list getan haben, aber jetzt, anstatt die for-Schleife auszuführen, rufen wir einfach die Funktion auf.
Und sagen wir, G ist gleich der Generatorfunktion und wir geben 100 an.
Wenn ich jetzt G drucke und auf Ausführen klicke.
Sie sehen, dass ich ein Generatorobjekt bekomme.
Ich erinnere mich, dass dies in Python nur die Standardmethode ist, mit der wir eine Generatorfunktion
mit dem Schlüsselwort range und yield erstellen können, aber dieses Schlüsselwort yield gibt uns etwas Macht, denn wenn ich nur hierher zurückkehre.
Wir erhalten nichts Besonderes, sondern erhalten stattdessen nur einen Wert, indem wir
das Schlüsselwort yield verwenden.
Was wir tun können, ist, dies in eine Generatorfunktion zu verwandeln, die gut kann, das kann ich Next G
sagen.
Wenn ich hier Next G ausdrucke und auf Ausführen klicke.
Ich bekomme null.
Aber hier ist ein cooles Teil, wenn ich NextG zweimal mache und dann einmal hier und ausdrucke.
Ich bekomme für.
Warum ist das so?
Denken Sie daran, dass das Schlüsselwort eagle die Funktion anhält.
Was hier gerade passiert ist, ist, dass ich die Funktion mit hundert ausgeführt habe.
Das erste Element im Bereich 100 war null.
Rechts.
Nun, hier, bevor ich überhaupt in der Lage war, zu starten, heißt es: Hey, das ist eine Generatorfunktion, aber das erste Mal, wenn
Sie sie ausführen.
Geben Sie der Ausgabe null mal an, damit wir diese Funktion beim allerersten Mal ausführen und ich auf Ausführen klicke.
Ich werde dafür sorgen, dass wir das in I ändern.
Dies ist nur dieses Jahr.
Wenn ich es noch einmal so ausführe, dann müssen wir es jetzt wiederholen und zu einem gehen.
Also einmal zwei, was ist das?
Was, um mich das mal so reparieren zu lassen?
Stellen Sie sicher, dass ich das bin, denn eins mal zwei ist zwei, wenn ich es erneut ausführe und auf Ausführen klicke.
Ich bekomme für.
Sie sehen yield, wie ich bereits sagte, pausiert die Funktion und kommt beim nächsten Aufruf darauf zurück.
Wenn es also ein Ertragsschlüsselwort hat, wird es zu einem Generator.
Es verfolgt diesen Zustand, was wir den Wert nennen, und behält beispielsweise nur die neuesten Daten im Speicher, da
es sich daran erinnert, weil in der letzten Zeile 14, wenn ich Next G drucke.
Es erinnert sich daran, dass ich früher dies war.
Nun, für den Moment, obwohl dieser Code bereits ausgeführt wurde, wenn ich ihn in Zeile 14 ausführe.
Ich bekomme sechs.
Weil dreimal zwei, nun ja, sechs ist, denken Sie daran, weil es mit zwei multipliziert wird, also lass mich dich das fragen.
Nehmen wir an, ich mache hier nur eine Reihe von einem, und wissen Sie was?
Lassen Sie uns einfach mit zwei multiplizieren.
Wenn ich dies tue und als nächstes mehr laufe, was passiert dann, wenn ich hier auf Ausführen klicke?
Ich erhalte eine Stop-Iteration, Sie sehen, next kann so oft aufgerufen werden, wie wir möchten, so oft, bis
dieser Bereich abläuft und wenn wir die Anzahl der Elemente im Bereich überschreiten.
Nun, wir bekommen eine Stop-Iteration, äh.
Um uns das mitzuteilen, hey, Sie können nicht mehr als nächstes anrufen.
Wir sind am Ende der Zeile angelangt und wenn wir for-Schleifen mit Bereichen verwenden, erkennt es dies tatsächlich für Sie unter
der Haube.
Wir können also eine Funktion wie diese ausführen, bei der wir range verwenden, obwohl range ein Generator ist, weil die for-Schleife
automatisch sagt, hey, ich werde aufhören, die Schleife zu durchlaufen, sobald ich auf diese Stop-Iteration stoße, aber das
ist vor uns als Benutzern verborgen.
Nun, dieses Konzept von Generatoren ist ziemlich schwer zu verstehen, besonders am Anfang.
Sie müssen sich das also vielleicht ein paar Mal ansehen.
Aber in den nächsten paar Videos möchte ich Sie davon überzeugen, wie mächtig sie sind.
Ich schaue im nächsten mal vorbei.