Pythonin iteraattori on objekti, jota käytetään iteroitaessa iteroitavissa olevia objekteja, kuten luetteloita, monikoita, saneluja ja joukkoja. Python-iteraattorit-objekti alustetaan käyttämällä iter() menetelmä. Se käyttää Seuraava() iterointimenetelmä.
- __iter__(): Menetelmää iter() kutsutaan iteraattorin alustamiseksi. Tämä palauttaa iteraattoriobjektin __next__(): Seuraava menetelmä palauttaa iteroitavan seuraavan arvon. Kun käytämme for-silmukkaa minkä tahansa iteroitavan objektin läpikäymiseen, se käyttää sisäisesti iteraattoriobjektin saamiseksi iter()-metodia, joka lisäksi käyttää next()-menetelmää iterointiin. Tämä menetelmä herättää StopIterationin ilmoittamaan iteraation päättymisestä.
Python iter() Esimerkki
Python 3
ohjelmistokehityksen elinkaari
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
>
>
Lähtö:
G F G>
Iteraattorin luominen ja silmukka käyttämällä iter()- ja next()-
Alla on yksinkertainen Python-iteraattori, joka luo iteraattorityypin, joka iteroituu 10:stä tiettyyn rajaan. Esimerkiksi jos raja on 15, se tulostaa 10 11 12 13 14 15. Ja jos raja on 5, se ei tulosta mitään.
Python 3
# A simple Python program to demonstrate> # working of iterators using an example type> # that iterates from 10 to given value> # An iterable user defined type> class> Test:> ># Constructor> >def> __init__(>self>, limit):> >self>.limit>=> limit> ># Creates iterator object> ># Called when iteration is initialized> >def> __iter__(>self>):> >self>.x>=> 10> >return> self> ># To move to next element. In Python 3,> ># we should replace next with __next__> >def> __next__(>self>):> ># Store current value ofx> >x>=> self>.x> ># Stop iteration if limit is reached> >if> x>>> >raise> StopIteration> ># Else increment and return old value> >self>.x>=> x>+> 1>;> >return> x> # Prints numbers from 10 to 15> for> i>in> Test(>15>):> >print>(i)> # Prints nothing> for> i>in> Test(>5>):> >print>(i)> |
>
>
Lähtö:
10 11 12 13 14 15>
Iteroidaan sisäänrakennetun iteroitavan kautta käyttämällä iter()-menetelmää
Seuraavissa iteraatioissa iteroinnin tilaa ja iteraattorimuuttujaa hallitaan sisäisesti (emme näe sitä) käyttämällä iteraattoriobjektia kulkemaan sisäänrakennetun iterablen yli, kuten lista , monikko , sanele , jne.
Python 3
# Sample built-in iterators> # Iterating over a list> print>(>'List Iteration'>)> l>=> [>'geeks'>,>'for'>,>'geeks'>]> for> i>in> l:> >print>(i)> > # Iterating over a tuple (immutable)> print>(>'
Tuple Iteration'>)> t>=> (>'geeks'>,>'for'>,>'geeks'>)> for> i>in> t:> >print>(i)> > # Iterating over a String> print>(>'
String Iteration'>)> s>=> 'Geeks'> for> i>in> s :> >print>(i)> > # Iterating over dictionary> print>(>'
Dictionary Iteration'>)> d>=> dict>()> d[>'xyz'>]>=> 123> d[>'abc'>]>=> 345> for> i>in> d :> >print>(>'%s %d'> %>(i, d[i]))> |
>
>
Lähtö:
List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>
Iterable vs Iterator
Python-iterable ja Python-iteraattori ovat erilaisia. Suurin ero niiden välillä on, että Pythonissa iteroitavissa oleva iteraatio ei voi tallentaa iteraation tilaa, kun taas iteraattoreissa nykyisen iteraation tila tallennetaan.
Huomautus: Jokainen iteraattori on myös iteroitava, mutta jokainen iteroitava ei ole iteraattori Pythonissa.
Lue lisää – Ero iteroitavan ja iteraattorin välillä.
Iterointi iteroitavalla
Toisto iteroitavan jokaisen kohteen kohdalla.
Python 3
imessage-pelejä Androidilla
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Lähtö:
a b c d e>
Iterointi iteraattorissa
Python 3
matriisi java-menetelmissä
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> # creating an iterator from the tuple> tup_iter>=> iter>(tup)> print>(>'Inside loop:'>)> # iterating on each item of the iterator object> for> index, item>in> enumerate>(tup_iter):> >print>(item)> ># break outside loop after iterating on 3 elements> >if> index>=>=> 2>:> >break> # we can print the remaining items to be iterated using next()> # thus, the state was saved> print>(>'Outside loop:'>)> print>(>next>(tup_iter))> print>(>next>(tup_iter))> |
>
>
Lähtö:
Inside loop: a b c Outside loop: d e>
StopIteration Erration -virhe iteraattoria käytettäessä
Pythonissa iteroitavaa voidaan iteroida useita kertoja, mutta iteraattorit nostavat StopIteration Error -virheen, kun kaikki kohteet on jo iteroitu.
Tässä yritämme saada seuraavan elementin iteraattorista for-silmukan valmistumisen jälkeen. Koska iteraattori on jo käytetty loppuun, se herättää StopIteration Exceptionin. Kun taas iteroitavaa käytettäessä voimme iteroida useita kertoja käyttämällä for-silmukkaa, tai voimme saada kohteita indeksoinnin avulla.
Python 3
iterable>=> (>1>,>2>,>3>,>4>)> iterator_obj>=> iter>(iterable)> print>(>'Iterable loop 1:'>)> # iterating on iterable> for> item>in> iterable:> >print>(item, end>=>','>)> print>(>'
Iterable Loop 2:'>)> for> item>in> iterable:> >print>(item, end>=>','>)> print>(>'
Iterating on an iterator:'>)> # iterating on an iterator object multiple times> for> item>in> iterator_obj:> >print>(item, end>=>','>)> print>(>'
Iterator: Outside loop'>)> # this line will raise StopIteration Exception> # since all items are iterated in the previous for-loop> print>(>next>(iterator_obj))> |
>
>
Lähtö:
Iterable loop 1: 1,2,3,4, Iterable Loop 2: 1,2,3,4, Iterating on an iterator: 1,2,3,4, Iterator: Outside loop Traceback (most recent call last): File 'scratch_1.py', line 21, in print(next(iterator_obj)) StopIteration>