Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!
This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!
Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount
Generatoren
Generators zijn heel eenvoudig te implementeren, maar een beetje moeilijk te begrijpen.
Generators worden gebruikt om iterators te maken, maar met een andere benadering. Generators zijn eenvoudige functies die een iterabele reeks items op een speciale manier één voor één opleveren.
Wanneer een iteratie over een reeks items begint met behulp van de for-verklaring, wordt de generator uitgevoerd. Zodra de functiecode van de generator een "yield"-verklaring bereikt, levert de generator zijn uitvoering terug aan de for-lus en geeft een nieuwe waarde uit de reeks terug. De generatorfunctie kan zoveel waarden (mogelijk oneindig) genereren als zij wil, waarbij zij elk op zijn beurt levert.
Hier is een eenvoudig voorbeeld van een generatorfunctie die 7 willekeurige gehele getallen retourneert:
Deze functie beslist zelfstandig hoe de willekeurige getallen moeten worden gegenereerd en voert de yield-verklaringen één voor één uit, waarbij hij telkens pauzeert om de uitvoering terug te geven aan de hoofd-for-lus.
Exercise
Schrijf een generatorfunctie die de Fibonacci-reeks retourneert. Ze worden berekend met de volgende formule: De eerste twee getallen van de reeks zijn altijd gelijk aan 1, en elk opeenvolgend geretourneerd getal is de som van de laatste twee getallen. Hint: Kun je slechts twee variabelen in de generatorfunctie gebruiken? Vergeet niet dat toewijzingen gelijktijdig kunnen worden gedaan. De code
zal gelijktijdig de waarden van a en b wisselen.
# fill in this function
def fib():
pass #this is a null statement which does nothing when executed, useful as a placeholder.
# testing code
import types
if type(fib()) == types.GeneratorType:
print("Good, The fib function is a generator.")
counter = 0
for n in fib():
print(n)
counter += 1
if counter == 10:
break
# fill in this function
def fib():
a, b = 1, 1
while 1:
yield a
a, b = b, a + b
# testing code
import types
if type(fib()) == types.GeneratorType:
print("Good, The fib function is a generator.")
counter = 0
for n in fib():
print(n)
counter += 1
if counter == 10:
break
test_output_contains("Good, The fib function is a generator.")
success_msg('Good work!')
This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!