Iteratori Python

Iterators programmā Python ir objekts, kas tiek izmantots, lai iterētu pār iterējamiem objektiem, piemēram, sarakstiem, korežiem, diktiem un kopām. Python iteratoru objekts tiek inicializēts, izmantojot iter() metodi. Tas izmanto Nākamais() iterācijas metode.

    __iter__(): metode iter() tiek izsaukta iteratora inicializācijai. Tas atgriež iteratora objektu __next__(): Nākamā metode atgriež nākamo iterējamā vērtību. Ja mēs izmantojam for cilpu, lai šķērsotu jebkuru iterējamu objektu, iekšēji tā izmanto metodi iter(), lai iegūtu iteratora objektu, kas tālāk izmanto next() metodi, lai atkārtotu. Šī metode rada StopIteration, lai signalizētu par iterācijas beigām.

Python iter() piemērs

Python3




string> => 'GFG'> ch_iterator> => iter> (string)> print> (> next> (ch_iterator))> print> (> next> (ch_iterator))> print> (> next> (ch_iterator))>

Izvade:

G F G 

Iteratora izveide un cilpa, izmantojot iter() un next()

Zemāk ir vienkāršs Python iterators, kas izveido iteratora veidu, kas atkārtojas no 10 līdz noteiktam ierobežojumam. Piemēram, ja limits ir 15, tad drukā 10 11 12 13 14 15. Un, ja limits ir 5, tad nedrukā neko.

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>>>

Izvade:

10 11 12 13 14 15 

Iterācija, izmantojot iebūvēto iterējamo metodi, izmantojot iter() metodi

Turpmākajās iterācijās iterācijas stāvoklis un iteratora mainīgais tiek pārvaldīts iekšēji (mēs to nevaram redzēt), izmantojot iteratora objektu, lai pārvietotos pa iebūvēto iterāciju, piemēram, sarakstu , korts , dikt utt.

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]))>

Izvade:

List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345 

Iterējams pret iteratoru

Python iterable un Python iterator atšķiras. Galvenā atšķirība starp tām ir tā, ka Python atkārtojams nevar saglabāt iterācijas stāvokli, savukārt iteratoros tiek saglabāts pašreizējās iterācijas stāvoklis.

Piezīme: Katrs iterators ir arī iterējams, taču ne katrs iterators ir iterators programmā Python .
Lasīt vairāk - Atšķirība starp iterējamo un iteratoru.

Iterācija uz Iterable

Iterācija katram iterējamā vienumam.

Python3




tup> => (> 'a'> ,> 'b'> ,> 'c'> ,> 'd'> ,> 'e'> )> for> item> in> tup:> > print> (item)>

Izvade:

a b c d e 

Iterācija 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))>

Izvade:

Inside loop: a b c Outside loop: d e 

Iteratora lietošanas laikā tiek parādīta StopIteration kļūda

Iterable Python var atkārtot vairākas reizes, bet iteratori rada StopIteration Error, kad visi vienumi jau ir iterēti.

Šeit mēs cenšamies iegūt nākamo elementu no iteratora pēc for-cilpas pabeigšanas. Tā kā iterators jau ir izsmelts, tas rada StopIteration izņēmumu. Tā kā, izmantojot iterējamu, mēs varam atkārtot vairākas reizes, izmantojot cilpu, vai varam iegūt vienumus, izmantojot indeksēšanu.

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))>

Izvade:

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