...
Tässä on esimerkki generaattorista, joka palauttaa lukuarvojen neliöitä. Generaattorille välitetään parametri, joka määrittää kuinka monta lukua on tarkoitus käydä läpi. Tämä generaattori on tehty niin, että laskenta alkaa uudestaan alusta kun kaikki luvut on käyty loppuun.esim18a
Code Block |
---|
def square(n):
while True:
for i in range(1, n + 1):
yield i * i
it = square(3)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
input("Paina Enter-näppäintä lopettaaksesi...")
|
Generaattorin voi asettaa for toistorakenteessa avainsanan in jälkeen, jolloin for käy läpi generaattorin tuottamat arvot. Generaattoreita voi käyttää for toistorakenteessa sijoittamalla generaattori avainsanan in jälkeen; iteraattorin palauttamia arvoja käydään läpi kunnes generaattori on käynyt loppuun.
Tässä esimerkki itsetehdyn generaattorin käytöstä for toistorakenteen kanssa. Aiempaan versioon täytyy tehdä muutos jotta iterointi loppuisi, muuten for toistorakenne jäisi ikuiseen silmukkaan.esim18b
Code Block |
---|
def square(n):
for i in range(1, n + 1):
yield i * i
for i in square(10):
print(i)
input("Paina Enter-näppäintä lopettaaksesi...")
|
Samoin käytäessä tiedostoa läpi toistorakenteessa for tiedosto-objekti toimii generaattorin, joka tuottaa tiedoston rivien mukaisia merkkijonoja. Samoin kokoelmat, joiden alkioita voidaan käydä läpi for toistorakenteessa. Muuttujista voi tehdä iteraattorin sisään rakennetun funktion iter avulla, joka ottaa parametriksi jonkun muuttujan.