Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Generatorfuncties | Specificatie van Returnwaarden van Functies
Python Functies Tutorial
Sectie 4. Hoofdstuk 4
single

single

Generatorfuncties

Veeg om het menu te tonen

Note
Definitie

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:

12345678910
def 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:

1234567
def 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
Note
Opmerking

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.

Taak

Veeg om te beginnen met coderen

Implementeer een generatorfunctie even_numbers die even getallen oplevert binnen een opgegeven bereik.

  1. Definieer een generatorfunctie even_numbers met twee parameters: start en stop.
  2. Gebruik een while-lus om te itereren zolang start kleiner dan of gelijk aan stop is.
  3. Gebruik yield om start alleen terug te geven als het een even getal is (deelbaar door 2).
  4. Verhoog start met 1 na elke iteratie.
  5. Gebruik een for-lus om alle gegenereerde waarden af te drukken.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

some-alt