Python 3/Iteraattorit
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
muokkaaOlio 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
Johdanto: | |
---|---|
Tietotyypit ja tietorakenteet: |
Luvut - Merkkijonot - Lista - Monikko (tuple) - Sanakirja - Joukko (set) |
Ohjausrakenteet | |
Muut kielen rakenteet: |
Moduuli - Luokka - Funktio - Virheidenhallinta - Tiedosto |
Graafinen käyttöliittymä: | |
Harjoitustehtäviä: | |
Lisätiedot ja lähteet: |