Bouw een generator
In eerdere oefeningen heb je vooral gewerkt met generator-expressies, die gebruikmaken van comprehension-syntaxis. Dat je comprehension-syntaxis voor generator-expressies kunt gebruiken, maakte je werk een stuk makkelijker!
Onthoud nu uit de video dat er niet alleen generator-expressies zijn, maar ook generatorfuncties. Generatorfuncties zijn functies die, net als generator-expressies, een reeks waarden opleveren in plaats van één enkele waarde terug te geven. Je definieert een generatorfunctie net als een gewone functie, maar telkens wanneer er een waarde wordt gegenereerd, gebruik je het sleutelwoord yield in plaats van return.
In deze oefening maak je een generatorfunctie met een vergelijkbaar mechanisme als de generator-expressie die je in de vorige oefening hebt gedefinieerd:
lengths = (len(person) for person in lannister)
Deze oefening maakt deel uit van de cursus
Python-gereedschapskist
Oefeninstructies
- Maak de functiekop af voor de functie
get_lengths()met één parameter:input_list. yieldin defor-lus in de functiedefinitie de lengte van de strings ininput_list.- Maak het iterabele deel af van de
for-lus die de waarden afdrukt die door de generatorfunctieget_lengths()worden gegenereerd. Roepget_lengths()aan en geef de lijstlannisterdoor.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Create a list of strings
lannister = ['cersei', 'jaime', 'tywin', 'tyrion', 'joffrey']
# Define generator function get_lengths
def ____:
"""Generator function that yields the
length of the strings in input_list."""
# Yield the length of a string
for person in input_list:
____
# Print the values generated by get_lengths()
for value in ____:
print(value)