Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Iteraattoriprotokolla | Python Iterators
Funktionaalisen Ohjelmoinnin Käsitteet Pythonissa

bookIteraattoriprotokolla

Pyyhkäise näyttääksesi valikon

Pythonissa iteraattoriprotokolla on joukko metodeja, jotka mahdollistavat olioiden läpikäynnin, tehden niistä yhteensopivia esimerkiksi for-silmukoiden kanssa. Kaksi keskeistä metodia ovat __iter__ ja __next__. Kun käytät for-silmukkaa olion kanssa, Python kutsuu sisäisesti olion __iter__-metodia saadakseen iteraattorin. Tällä iteraattorilla täytyy olla __next__-metodi, joka palauttaa seuraavan alkion sekvenssistä aina kun sitä kutsutaan. Kun alkioita ei ole enää jäljellä, __next__-metodin tulee nostaa StopIteration-poikkeus ilmoittaakseen sekvenssin päättymisestä.

1234567891011121314151617181920212223242526
class SquaresIterator: # Initialize with the number of squares to generate def __init__(self, limit): self.limit = limit self.current = 0 # Return the iterator object (itself) def __iter__(self): return self # Return the next square, or stop if done def __next__(self): if self.current < self.limit: # Calculate square result = self.current ** 2 # Move to next number self.current += 1 return result # If no more items else: raise StopIteration for square in SquaresIterator(5): print(square)
copy

__init__ – Alustusvaihe

Kun iteraattori luodaan, se saa:

  • limit → kuinka monta lukua generoidaan;

  • Asettaa current = 0 → aloituspiste;

  • Valmistelee kaiken tarvittavan iteraatiota varten.

__iter__ – Iteroitavaksi tekeminen

  • Palauttaa self (olion itsensä);
  • Tämä mahdollistaa olion käytön for-silmukassa.

__next__ – Arvojen tuottaminen

Tämä metodi suoritetaan aina, kun silmukka pyytää seuraavaa alkiota:

  • Jos current < limit:
    • Laske current²;
    • Kasvata current yhdellä;
    • Palauta tulos.
  • Jos currentlimit:
    • Nosta StopIteration lopettaaksesi silmukan automaattisesti.
question mark

Mikä seuraavista vaaditaan, jotta olio on Pythonissa iteroitava?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 5. Luku 3
some-alt