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 doorlopen om waarden één voor één op te halen.
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 afsluit, pauzeert yield de functie en slaat de status ervan 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 yielden), zal het aanroepen van next() 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 oplevert binnen een opgegeven bereik.
- Definieer een generatorfunctie
even_numbersmet twee parameters: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.