Iterator v Pythonu je predmet, ki se uporablja za iteracijo čez ponovljive objekte, kot so seznami, tuple, dicts in nizi. Objekt iteratorjev Python se inicializira z uporabo iter() metoda. Uporablja Naslednji() metoda za ponovitev.
- __iter__(): Metoda iter() se kliče za inicializacijo iteratorja. To vrne objekt iteratorja __next__(): Naslednja metoda vrne naslednjo vrednost za iterable. Ko uporabimo zanko for za prečkanje katerega koli predmeta, ki ga je mogoče ponoviti, interno uporabi metodo iter(), da pridobi objekt iteratorja, ki nadalje uporablja metodo next() za ponavljanje. Ta metoda sproži StopIteration, da signalizira konec ponovitve.
Primer Python iter().
Python3
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
tipkopis foreach
>
>
Izhod:
G F G>
Ustvarjanje iteratorja in zankanje po iteratorju z uporabo iter() in next()
Spodaj je preprost iterator Python, ki ustvari vrsto iteratorja, ki ponavlja od 10 do dane omejitve. Na primer, če je omejitev 15, potem natisne 10 11 12 13 14 15. In če je omejitev 5, potem ne natisne ničesar.
Python3
# 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>>self>.limit:> >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)> |
>
>
Izhod:
10 11 12 13 14 15>
Ponavljanje nad vgrajenim iterable z uporabo metode iter().
V naslednjih iteracijah se stanje iteracije in spremenljivka iteratorja upravljata interno (ne moremo je videti) z uporabo objekta iteratorja za prečkanje vgrajene iterable, kot je seznam , tuple , dikt itd.
Python3
# 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]))> |
>
>
Izhod:
List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>
Iterable proti Iteratorju
Python iterable in Python iterator sta različna. Glavna razlika med njima je, da iterable v Pythonu ne more shraniti stanja iteracije, medtem ko se pri iteratorjih shrani stanje trenutne iteracije.
Opomba: Vsak iterator je tudi iterable, vendar ni vsak iterator iterator v Pythonu.
Preberi več – Razlika med iterable in iterator.
Ponavljanje na Iterable
Ponavljanje na vsakem elementu ponovljivega.
Python3
java in swing
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Izhod:
a b c d e>
Ponavljanje na iteratorju
Python3
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))> |
>
>
Izhod:
Inside loop: a b c Outside loop: d e>
Pridobivanje napake StopIteration med uporabo iteratorja
Iterable v Pythonu je mogoče ponoviti večkrat, vendar iteratorji povzročijo StopIteration Error, ko so vsi elementi že iterirani.
Tukaj poskušamo pridobiti naslednji element iz iteratorja po zaključku for-zanke. Ker je iterator že izčrpan, sproži izjemo StopIteration. Medtem ko lahko z uporabo iterable ponovimo večkrat z uporabo zanke for ali lahko pridobimo elemente z indeksiranjem.
Python3
shreya ghoshal
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))> |
>
>
Izhod:
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>