single
Generatorfuncties
Veeg om het menu te tonen
Een generatorfunctie is een speciaal type functie die het sleutelwoord yield gebruikt in plaats van return om een reeks waarden te genereren. Wanneer een generatorfunctie wordt aangeroepen, retourneert deze een iteratorobject, dat kan worden geïtereerd om waarden één voor één op te halen.
Een iteratorobject is een object dat het iteratorprotocol implementeert door de methoden __iter__() en __next__() te definiëren. Hierdoor kun je elementen één voor één ophalen met next(), waardoor het mogelijk is om over items in reeksen of generatorfuncties te itereren.
Het belangrijkste voordeel van generatorfuncties is hun geheugenefficiëntie. In plaats van de volledige reeks vooraf te genereren en in het geheugen op te slaan, produceren generators waarden on-the-fly wanneer ze nodig zijn.
Hoe yield werkt
In tegenstelling tot return, dat de functie volledig beëindigt, pauzeert yield de functie en slaat het de huidige status op. De volgende keer dat next() wordt aangeroepen, gaat de generator precies verder waar hij was gebleven:
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
Je kunt ook over een generator itereren met een for-lus – deze roept automatisch next() aan totdat de generator is uitgeput:
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
Wanneer een generator is uitgeput (geen waarden meer om te genereren), zal het aanroepen van next() erop een StopIteration-fout veroorzaken. Een for-lus handelt dit automatisch af.
Veeg om te beginnen met coderen
Implementeer een generatorfunctie even_numbers die even getallen binnen een opgegeven bereik oplevert.
- Definieer een generatorfunctie
even_numbersdie twee parameters accepteert:startenstop. - Gebruik een
while-lus om te itereren zolangstartkleiner dan of gelijk aanstopis. - Gebruik
yieldomstartalleen terug te geven als het een even getal is (deelbaar door 2). - Verhoog
startmet 1 na elke iteratie. - Gebruik een
for-lus om alle gegenereerde waarden af te drukken.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.