En iterator i Python er et objekt, der bruges til at iterere over iterable objekter som lister, tuples, dicts og sets. Python iterators-objektet initialiseres ved hjælp af iter() metode. Den bruger Næste() metode til iteration.
- __iter__(): Iter()-metoden kaldes til initialisering af en iterator. Dette returnerer et iteratorobjekt __next__(): Den næste metode returnerer den næste værdi for den iterable. Når vi bruger en for-løkke til at krydse ethvert iterbart objekt, internt bruger det iter()-metoden til at få et iterator-objekt, som yderligere bruger next()-metoden til at iterere over. Denne metode rejser en StopIteration for at signalere slutningen af iterationen.
Python iter() Eksempel
Python3
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
>
konvertering af streng til heltal i java
>
Output:
G F G>
Oprettelse og loop over en iterator ved hjælp af iter() og next()
Nedenfor er en simpel Python Iterator, der skaber en iteratortype, der itererer fra 10 til en given grænse. For eksempel, hvis grænsen er 15, så udskriver den 10 11 12 13 14 15. Og hvis grænsen er 5, så udskriver den ingenting.
Python3
java scanner næste
# 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)> |
>
>
Produktion:
10 11 12 13 14 15>
Iterering over indbygget iterable ved hjælp af iter()-metoden
I de følgende iterationer administreres iterationstilstanden og iteratorvariablen internt (vi kan ikke se det) ved hjælp af et iteratorobjekt til at krydse den indbyggede iterable som f.eks. liste , tupel , 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 og Python iterator er forskellige. Den største forskel mellem dem er, at iterable i Python ikke kan gemme tilstanden for iterationen, mens i iteratorer bliver tilstanden for den aktuelle iteration gemt.
Bemærk: Hver iterator er også en iterabel, men ikke alle iterable er en iterator i Python.
Læs mere – Forskellen mellem iterable og iterator .
tilpasset undtagelse i java
Iteration på en Iterable
Iteration på hvert element i den iterable.
Python3
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Produktion:
a b c d e>
Iteration 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))> |
>
>
scanner.next java
Produktion:
Inside loop: a b c Outside loop: d e>
Får StopIteration-fejl under brug af iterator
Iterable i Python kan itereres over flere gange, men iteratorer rejser StopIteration Error, når alle elementer allerede er itereret.
Her forsøger vi at få det næste element fra iteratoren efter afslutningen af for-løkken. Da iteratoren allerede er opbrugt, rejser den en StopIteration-undtagelse. Mens vi ved at bruge en iterable, kan iterere flere gange ved at bruge for loop eller kan få elementer ved hjælp af indeksering.
Python3
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))> |
konvertere en streng til en dato
>
>
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>