Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

## Generatoren Een generator in Python is een speciale soort functie die waarden kan teruggeven ("yield") in plaats van ze alleen maar terug te geven. Ze worden meestal gebruikt om efficient over grote datasets of eindeloze reeksen te lopen zonder al het geheugen te belasten. ### Hoe een generator te maken Gebruik het sleutelwoord `yield` in plaats van `return` om een generator-functie te maken: ```python # Een eenvoudige generator def eenvoudige_generator(): yield 1 yield 2 yield 3 ``` In plaats van alle waarden tegelijk te retourneren, geeft deze generator ze één voor één: ```python # Gebruik de generator for waarde in eenvoudige_generator(): print(waarde) ``` Dit zal de uitgang geven: ``` 1 2 3 ``` ### Voordelen van Generators 1. **Lage geheugendruk**: Generators laden niet alle waardes in het geheugen tegelijk. 2. **Lui laden (Lazy Evaluation)**: Ze berekenen de waardes alleen wanneer dat nodig is. 3. **Meer leesbare code**: Helpt de code kort en overzichtelijk te houden door de ingewikkelde iteratie logica uit de loops te houden. ### Generator Expressions Generator expressies zijn vergelijkbaar met list comprehensions, maar gebruiken ronde haken in plaats van vierkante haken. ```python # Een generator expressie generator = (x * x for x in range(10)) for waarde in generator: print(waarde) ``` Dit zal alle kwadraten van 0 tot 9 printen, zonder ze allemaal tegelijk in het geheugen te hebben.
Gegevens naar een Generator sturen

Doel

Verzamel wol en spin het tot garen met behulp van de spinnewielen door gegevens naar een generator te sturen.

Sommige schapen worden een beetje te wollig, het is het beste om ze te scheren en hun wol te verzamelen. Je kunt de wol dan door een spinnewiel halen om garen te produceren. Om dit te bereiken moeten we een generator gebruiken, omdat de hoeveelheid garen en wol die verwerkt wordt sterk kan variëren.

Definieer eerst een generator die in staat is om garen te spinnen, noem het spin(). Deze generator moet worden opgezet om externe invoer te gebruiken om te functioneren. Het leest gegevens van yield en plaatst deze in een variabele, vervolgens wijzigt het de inhoud door de lengte met elke cyclus te vergroten, om uiteindelijk een resultaat te produceren.

def spin(): cycle = 1 while True: cycle += 1 yarn = yield yarn = yarn * cycle yield player.speak("Je hebt %d ft garen gesponnen" % (yarn))

Omdat dit een generator is, kan de while()-instructie binnenin worden gepauzeerd en gewijzigd om de gewenste uitvoer te produceren. Dit niveau van controle ligt aan de basis van wat een generator is en hoe het nuttig kan zijn bij het verwerken van gegevens. Om gegevens in de generator in te voegen, definieer je het en gebruik je de send()-functie om het met gewenste gegevens te voeden, bijvoorbeeld:

spindle = spin() # Maak een instantie van de generator next(spindle) # Voer de generator een enkele stap uit spindle.send(6) # Voer gegevens in de generator in # In dit geval stuur je het nummer 6

Loop naar de X gemarkeerde plek door de gekleurde tapijten en kijk naar de schapen. Er is een constant woordenboek genaamd sheep dat de waarde bevat hoeveel wol je van elk schaap kunt scheren. Gebruik de speak() functie met het woordenboek en de kleur van het tapijt waarop je staat, om de wol van het schaap te scheren en te controleren hoeveel je hebt verzameld. Bijvoorbeeld: player.speak(sheep["green"]) .

Er zijn in totaal vier (4) gekleurde tapijten: "green" , "red" , "blue" en "orange" . Zodra je de schapen hebt geschoren, loop je naar de donkere X gemarkeerde plekken bij elk gekleurd tapijt waar de spinnewielen zich bevinden. Gebruik send() om het aantal pond geschoren wol van elk schaap in hun respectievelijke kleur in de generator in te voeren.

Bijvoorbeeld, als je bij het scheren van het schaap in het "green" tapijt 4 pond wol scheert, ga je naar het "green" tapijt bij de spinnewielen en stuur je die gegevens naar de generator, zoals dit:

next(spindle) spindle.send(4)

Doe dit voor alle vier (4) donkere X gemarkeerde plekken op de gekleurde tapijten om het niveau af te maken.

Codeboek