Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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.