Iteraattori on olio, joka antaa käydä läpi säiliöolion (kuten listan) sisältämät alkiot. Esimerkiksi, kun aiemmin käytimme for-silmukkaa, käytimme itseasiassa iteraattoria. Pythonissa iteraattori voi olla erillinen olio, joka antaa pääsyn isäntäolioon tai olio voi itse toimia omana iteraattorinaan.

Iteraattorin toteuttaminen

muokkaa

Olio tehdään iteroitavaksi toteuttamalla sille __iter__- ja __next__-metodit. __next__ palauttaa olion alkiot yksi kerrallaan (tai muulla sopivalla tavalla) ja heittää virheen StopIteration, kun alkiot loppuvat. __iter__-metodi palauttaa olion iteraattorin. Jos olio on itse itsensä iteraattori, palauttaa se self.

Esimerkiksi alla oleva olio palauttaa annetun päivämäärävälin päivät, kun sitä käytetään for-silmukassa.

from datetime import date

class PaivaIterator(object):
    """Iteraattori kaikkien päivien läpikäymiseen tietyltä väliltä.
    """

    def __init__(self, alku, loppu):
        self.i_ord = alku.toordinal()
        self.loppu_ord = loppu.toordinal()

    def __iter__(self):
        return self

    def __next__(self):
        if self.i_ord == self.loppu_ord:
            raise StopIteration
        else:
            datestd = date.fromordinal(self.i_ord)
            self.i_ord += 1
            return datestd

if __name__ == "__main__":
    from datetime import timedelta
    import locale
    locale.setlocale(locale.LC_ALL, "fi_FI.UTF-8")
    alku = date.today()
    loppu = date.today() + timedelta(days=10)
    for d in PaivaIterator(alku, loppu):
       print(d.strftime('%a %x'))

Tulostaa

ti 12.07.2022
ke 13.07.2022
to 14.07.2022
pe 15.07.2022
la 16.07.2022
su 17.07.2022
ma 18.07.2022
ti 19.07.2022
ke 20.07.2022
to 21.07.2022