Itereren over iterables (2)
Een van de dingen die je in dit hoofdstuk hebt geleerd, is dat niet alle iterables echte lijsten zijn. Enkele voorbeelden die we hebben bekeken zijn strings en het gebruik van de functie range(). In deze oefening focussen we op de functie range().
Je kunt range() in een for-lus gebruiken alsof het een lijst is waar je over iterereert:
for i in range(5):
print(i)
Onthoud dat range() de lijst niet daadwerkelijk maakt; in plaats daarvan maakt het een range-object met een iterator die waarden oplevert totdat de limiet is bereikt (in het voorbeeld tot en met de waarde 4). Als range() wel de echte lijst zou maken, dan zou het aanroepen met een waarde van \(10^{100}\) niet werken, zeker omdat zo'n groot getal het geheugen van een gewone computer kan overschrijden. De waarde \(10^{100}\) heet trouwens een Googol: een 1 gevolgd door honderd nullen. Dat is enorm!
Je taak in deze oefening is te laten zien dat range() aanroepen met \(10^{100}\) de lijst niet vooraf aanmaakt.
Deze oefening maakt deel uit van de cursus
Python-gereedschapskist
Oefeninstructies
- Maak een iterator-object
small_valueoverrange(3)met de functieiter(). - Gebruik een
for-lus om overrange(3)te itereren en print bij elke iteratie de waarde. Gebruiknumals lusvariabele. - Maak een iterator-object
googoloverrange(10 ** 100).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Create an iterator for range(3): small_value
small_value = ____
# Print the values in small_value
print(next(small_value))
print(next(small_value))
print(next(small_value))
# Loop over range(3) and print the values
# Create an iterator for range(10 ** 100): googol
googol = ____
# Print the first 5 values from googol
print(next(googol))
print(next(googol))
print(next(googol))
print(next(googol))
print(next(googol))