Oké, deze enorme lijst is eindelijk in het geheugen ingevoerd.
Maar onthoud onze belangrijkste termen, weet je nog hoe hij zei dat een lijst een herhaling is?
Wat was een herhaling?
Een iterabel is elk object in Python, waar we doorheen kunnen lopen onder de motorkap,
het heeft de Dundar ed-methode.
Dus wanneer het object is gemaakt, stelt deze itour ons in staat om een itereerbaar object te hebben dat
kan worden herhaald om iets te herhalen, of iteratie is de handeling van het nemen van een item uit een iterabel, er iets aan doen en dan naar
de volgende gaan.
Wanneer we lussen gebruiken, zoals for-lussen of while-lussen, noemen we dat iteratie.
Het is het proces zelf.
En generatoren.
Zijn eigenlijk itereerbaar, dat wil zeggen dat alles wat een generator is itereerbaar is, je kunt eroverheen herhalen, maar niet
alles dat is.
Iterable is een generator, een bereik is bijvoorbeeld een generator.
Dus dat blijft altijd herhalen.
Maar een lijst is een herhaling, maar het is geen generator.
Een generator is dus een deelverzameling van een iterabel.
Ik weet dat het veel woorden zijn.
Hopelijk ben je nog steeds bij me.
Het verschil tussen een generator en een reguliere iterable is de manier waarop we ze implementeren.
Dus laat me je een algemene manier tonen om een generator te maken.
Laten we deze code wissen en onze eigen generator definiëren en generatoren zijn meestal functies, net zoals bereik een functie
is, generatoren worden meestal op deze manier gemaakt.
Dus laten we zeggen generatorfunctie.
En deze generatorfunctie zal een for-lus hebben die over een bereik gaat lopen, net zoals we eerder
hadden.
Maar het verschil hier, laten we de code terugbrengen die we eerder hadden.
Ze gaat hier commentaar op geven, zodat we het kunnen zien in termen van verschil.
De generatorfunctie gaat naar.
Maak, laten we zeggen, deze vele items.
Maar in plaats van terug te keren zoals we zouden doen in een normale functie, gaan we een sleutelwoord gebruiken met de naam
opbrengst.
En hier gaan we de I so het item opleveren.
Let hier dus op het verschil.
Nu, als we willen zoals hier, kunnen we een nummer doorgeven.
Zoals dit, maar in plaats van terug te keren.
En als we deze lijst toevoegen en al deze gegevens maken, gaan we ILD gebruiken.
Wat levert opbrengst op? Zie je dat opbrengst de functie pauzeert en erop terugkomt als we er iets mee doen, wat hierna wordt
genoemd, iets dat we binnenkort zullen bespreken?
Dus Yield zegt, hey, pauzeer de functie, geef gewoon op.
Ik geef het en als je me zegt weer door te gaan, dan blijf ik doorgaan.
Dus hoe kunnen we dit doen?
Nou, ik kan zeggen dat ik voor het item in de generatorfunctie ga.
Druk het artikel af.
Wat er nu gaat gebeuren, is dat we de generatorfunctie gaan herhalen en die aan de generatorfunctie
geven, laten we zeggen duizend voor nu.
En we gaan elk item in de generatorfunctie afdrukken omdat dit een herhaling is.
Het gaat lopen en het gaat in een lus en voor elk item in dit aantal, dus dat is het bereik dat we gaan
opleveren, waarom?
Dus het blijft maar herhalen en herhalen.
En als we terugkomen, als we een lus maken.
We gaan dit en de opbrengst uitvoeren.
Komt terug en loopt weer.
Laat me je laten zien wat ik ga becommentariëren dit uit, becommentarieer dit ook en klik gewoon op Ron hier.
Heb je gezien dat wat we hier net hebben gedaan vergelijkbaar is met hier beneden, maar in plaats van die lijst in het geheugen
te moeten maken, ging het gewoon één voor één door.
We hadden maar één item in het geheugen.
En we gebruikten het zoals we wilden, in ons geval was alles wat we deden het item afdrukken.
Laten we dit rendementszoekwoord wat nader onderzoeken.
Wat doet het eigenlijk?
Laten we zeggen dat we dit met twee willen vermenigvuldigen, net zoals we hier deden in ons originele voorbeeld
met lijst, maar laten we nu in plaats van de for-lus te doen, de functie aanroepen.
En zeg G is gelijk aan generatorfunctie en we geven het 100.
Nu, als ik G afdruk en ik klik op uitvoeren.
Je ziet dat ik een generatorobject krijg.
Ik herinner me dat dit gewoon de standaardmanier is in Python dat we een generatorfunctie kunnen
maken met behulp van het bereik en het rendementssleutelwoord, maar dit rendementssleutelwoord geeft ons wat kracht, want als ik hier gewoon terugkom.
We gaan niets speciaals krijgen, in feite krijgen we in plaats daarvan gewoon een waarde
door het trefwoord rendement te gebruiken.
Wat we kunnen doen is dit om te zetten in een generatorfunctie die het goed kan, dit kan ik zeggen Next
G.
Nu, als ik Next G hier afdruk en ik klik op uitvoeren.
Ik krijg nul.
Maar hier is een cool deel, als ik NextG twee keer doe en dan één keer hier en afgedrukt.
ik krijg voor.
Waarom is dat?
Onthoud dat het trefwoord eagle de functie pauzeert.
Dus wat hier net is gebeurd, is dat ik de functie met honderd heb uitgevoerd.
Het eerste item in bereik 100 was nul.
Rechts.
Hier, voordat ik zelfs maar kon rennen, wordt er gezegd, hé, dit is een generatorfunctie, maar de eerste keer dat je
het uitvoert.
Geef de uitvoer nul keer aan zodat de allereerste keer dat we deze functie uitvoeren en ik op uitvoeren klik.
Ik zal ervoor zorgen dat we dat veranderen in I.
Dit is pas dit jaar.
Als ik het opnieuw op deze manier uitvoer, dan hebben we nu dat ik wil dat je het herhaalt en naar een gaat.
Dus één keer twee, wat is dat?
Wat, een keer om mij dat zo te laten oplossen?
Zorg ervoor dat ik dit ben, want één keer twee is twee, als ik het opnieuw doe en ik klik op uitvoeren.
ik krijg voor.
Je ziet dat opbrengst, zoals ik al eerder zei, de functie pauzeert en erop terugkomt wanneer de volgende wordt aangeroepen.
Dus als het een rendementszoekwoord heeft, wordt het een generator.
Het houdt deze status bij, wat we de waarde noemen, en het houdt bijvoorbeeld alleen de meest recente gegevens in het
geheugen bij, want het onthoudt dat omdat op de laatste regel 14, als ik Next G.
Het herinnert zich dat ik dit vroeger was.
Nou, voor nu, hoewel dit stuk code al liep, als ik het op regel 14 uitvoer.
Ik krijg er zes.
Omdat drie keer twee, nou ja, zes is, onthoud, omdat het vermenigvuldigd wordt met twee, dus laat me je dit vragen.
Als laten we zeggen dat ik hier maar een reeks van één doe, en weet je wat?
Laten we vermenigvuldigen met twee verwijderen.
Als ik dit doe en ik ren de volgende keer, nou ja, meer dan eens, wat gebeurt er als ik hier op rennen klik?
Ik krijg een stop-iteratie, je ziet volgende kan zo vaak worden aangeroepen als we willen, zo vaak totdat
dit bereik verloopt en wanneer we het aantal items in het bereik overschrijden.
Nou, we krijgen een stop iteratie, eh.
Om ons dat te laten weten, hey, je kunt hierna niet meer bellen.
We hebben het einde van de regel bereikt en wanneer we for-lussen met reeksen gebruiken, detecteert het dit onder de motorkap
voor je.
Dus we kunnen een functie als deze uitvoeren waarbij we bereik gebruiken, ook al is bereik een generator, omdat
de for-lus automatisch zegt, hey, ik stop met loopen zodra ik deze stop-iteratie tegenkom, maar dat is
voor ons als gebruikers verborgen.
Dit concept van generatoren is vrij moeilijk te begrijpen, vooral in het begin.
Het kan dus zijn dat je hier een paar keer naar moet kijken.
Maar in de komende paar video's wil ik je ervan overtuigen hoe krachtig ze zijn.
Ik zal zien in de volgende door.