En iterator i Python är ett objekt som används för att iterera över itererbara objekt som listor, tupler, dikter och uppsättningar. Python iterators-objektet initieras med hjälp av iter() metod. Den använder Nästa() metod för iteration.
- __iter__(): Metoden iter() anropas för initiering av en iterator. Detta returnerar ett iteratorobjekt __next__(): Nästa metod returnerar nästa värde för den iterable. När vi använder en for-loop för att korsa ett iterbart objekt, internt använder den metoden iter() för att få ett iteratorobjekt, som vidare använder metoden next() för att iterera över. Denna metod höjer en StopIteration för att signalera slutet på iterationen.
Python iter() Exempel
Python3
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
>
>
Utgång:
G F G>
Skapa och loopa över en iterator med iter() och next()
Nedan finns en enkel Python Iterator som skapar en iteratortyp som itererar från 10 till en given gräns. Till exempel, om gränsen är 15, så skriver den ut 10 11 12 13 14 15. Och om gränsen är 5, så skriver den ingenting.
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)> |
konvertering från sträng till int i java
>
>
Produktion:
10 11 12 13 14 15>
Itererar över inbyggd iterabel med iter()-metoden
I följande iterationer hanteras iterationstillståndet och iteratorvariabeln internt (vi kan inte se det) med hjälp av ett iteratorobjekt för att gå över den inbyggda iterable som lista , tuppel , dikt , etc.
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]))> |
>
>
Produktion:
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 och Python iterator är olika. Den största skillnaden mellan dem är att iterable i Python inte kan spara tillståndet för iterationen, medan det i iteratorer sparas tillståndet för den aktuella iterationen.
Notera: Varje iterator är också en iterabel, men inte varje iterabel är en iterator i Python.
Läs mer – Skillnaden mellan iterabel och iterator .
Itererar på en Iterable
Itererar på varje objekt i den iterbara.
Python3
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Produktion:
a b c d e>
Itererar på en iterator
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))> |
>
>
Produktion:
Inside loop: a b c Outside loop: d e>
Får StopIteration-fel när iterator används
Iterable i Python kan itereras över flera gånger, men iteratorer skapar StopIteration Error när alla objekt redan är itererade.
Här försöker vi få nästa element från iteratorn efter slutförandet av for-loopen. Eftersom iteratorn redan är slut, skapar den ett StopIteration-undantag. Medan vi använder en iterabel kan vi iterera flera gånger med for loop eller kan få objekt med indexering.
Python3
kan abstrakt klass ha konstruktor
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))> |
>
>
Produktion:
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>