Oké, ik kan je niet zien, maar ik weet wat je voelt, je twijfelt nu aan me, je
denkt dat generatoren nutteloos zijn.
Je zegt steeds dat ze snel en performant zijn, maar ik snap het niet echt.
Dit LTH-toetsenbord en dit volgende.
En eerlijk gezegd, het heeft gewoon geen zin.
Laat me je overtuigen van hun ware kracht.
Ik ga deze allemaal selecteren en ze gewoon verwijderen, omdat ik terug wil naar een voorbeeld dat we eerder
hebben gebruikt.
Weet je nog toen we de decorateurvoorstelling maakten?
In onze decoratieafdeling.
Laten we deze prestatie-decorateur gebruiken, laten we het minimaliseren, ik moet.
Functies voor ons, een lange tijdfunctie die een bereik gebruikt.
En nog een oude functie die een bereik gebruikt en dit vervolgens omzet in een lijst.
Dus onthoud, men maakt een lijst en dan van die lijst die een geheugen op onze computers heeft gemaakt, het gaat
één voor één en vermenigvuldigt dingen met vijf versus een bereik, wat een generator is die in Python
is ingebouwd en die gewoon één voor één, houd nul en geheugen vast en vermenigvuldig met vijf.
Houd een in het geheugen, maar vermenigvuldig met vijf en blijf doorgaan, blijft doorgaan, blijft doorgaan en verwijder alle
oude nummers uit het geheugen.
Wat denk je dat de prestaties van beide zullen zijn?
Laten we het eens testen.
En trouwens, ik zal een link naar de oefening plaatsen, zodat je het zelf kunt uitproberen en spelen.
Dus laten we een lange tijd doen.
En dan lang.
Plaats uw weddenschappen, maak u klaar.
Laten wij het uitzoeken.
De eerste functie duurde lang één punt zes seconden.
En toen duurde de tweede functie bijna twee keer zo lang.
Dat is best een groot verschil, toch?
Maar we kunnen het meteen zien.
Oké, dit is zeker beter dan, nou ja, een lange tijd om het opnieuw te laten lopen, alleen om onze aannames te testen, om er zeker
van te zijn dat het correct is.
Deze keer kostte het één punt acht en vervolgens twee punt zes.
Oke.
Dit gaat zoveel sneller, ook al doen ze allebei hetzelfde.
En denk hieraan.
Als je Google was, bedenk dan hoeveel data Google heeft als je bij Google werkt en stel je voor dat
dit nog groter was, als dit nog langer was, als je een taak zo veel sneller zou kunnen uitvoeren.
Gebruik veel minder bronnen dan wat Google heeft.
Ik bedoel, ze zouden van je houden omdat ze met generatoren dingen niet in het geheugen konden houden,
niet al die bronnen hoefden te verbruiken en in plaats daarvan gegevens efficiënt konden verwerken.
En kijk eens hier.
Ik heb deze functie in 16 seconden kunnen oplossen.
Ik bedoel, ja, dat heeft lang geduurd, maar het duurde lang voordat het echt kon.
Het doodde het proces.
Als dit een Google-server was, is dat een server die net is overleden en volledig nutteloos is.
Generatoren zijn dus echt heel handig bij het berekenen van grote gegevenssets, vooral als we lange lussen gebruiken waar
we dat geheugen niet echt willen opslaan en we niet alles tegelijk hoeven te berekenen, misschien
één per een.
En veel bibliotheken in Python onder de motorkap gebruiken generatoren in plaats van lijsten omdat ze zoveel
sneller zijn.
Denk er dus aan om een generator te maken.
Het enige dat we hoeven te doen, is een generatorfunctie maken die we willen.
En dan hier, kunnen we gewoon een waarde doorlussen.
Dat we het misschien aan een bereik geven of dat we het gewoon als parameter kunnen accepteren en dat
we alleen dat resultaat hoeven te geven.
En doe wat we willen in dit blok, maar zorg ervoor dat we de functie pauzeren zodat deze later kan worden
gebruikt.
Als een generatorfunctie, dus we kunnen zoiets als een for-lus doen en item in gen-functie zeggen en het een soort
parameter geven.