Un iteratore in Python è un oggetto utilizzato per scorrere oggetti iterabili come liste, tuple, dict e set. L'oggetto iteratori Python viene inizializzato utilizzando il metodo iter() metodo. Utilizza il Prossimo() metodo per l'iterazione.
- __iter__(): il metodo iter() viene chiamato per l'inizializzazione di un iteratore. Ciò restituisce un oggetto iteratore __next__(): il metodo successivo restituisce il valore successivo per l'iterabile. Quando utilizziamo un ciclo for per attraversare qualsiasi oggetto iterabile, internamente utilizza il metodo iter() per ottenere un oggetto iteratore, che utilizza inoltre il metodo next() per eseguire l'iterazione. Questo metodo genera un StopIteration per segnalare la fine dell'iterazione.
Python iter() Esempio
Python3
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
>
>
Produzione :
G F G>
Creazione e loop su un iteratore utilizzando iter() e next()
Di seguito è riportato un semplice iteratore Python che crea un tipo di iteratore che esegue l'iterazione da 10 a un determinato limite. Ad esempio, se il limite è 15, viene stampato 10 11 12 13 14 15. E se il limite è 5, non viene stampato nulla.
Python3
indice Java di
Giochi iMessage su Android
# 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)> |
>
>
Produzione:
10 11 12 13 14 15>
Iterazione sull'iterabile integrato utilizzando il metodo iter()
Nelle seguenti iterazioni, lo stato dell'iterazione e la variabile iteratore vengono gestiti internamente (non possiamo vederlo) utilizzando un oggetto iteratore per attraversare l'iterabile integrato come elenco , tupla , dict , eccetera.
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]))> |
>
>
Produzione:
List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>
Iterabile vs Iteratore
L'iterabile Python e l'iteratore Python sono diversi. La differenza principale tra loro è che iterabile in Python non può salvare lo stato dell'iterazione, mentre negli iteratori viene salvato lo stato dell'iterazione corrente.
Nota: Ogni iteratore è anche un iterabile, ma non tutti gli iterabili sono un iteratore in Python.
Per saperne di più – Differenza tra iterabile e iteratore.
tipi di test del software
Iterazione su un Iterable
Iterazione su ciascun elemento dell'iterabile.
Python3
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Produzione:
variabili nginx
a b c d e>
Iterazione su un iteratore
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))> |
>
>
Produzione:
c# contiene una stringa
Inside loop: a b c Outside loop: d e>
Ottenimento dell'errore StopIteration durante l'utilizzo dell'iteratore
Iterable in Python può essere ripetuto più volte, ma gli iteratori sollevano l'errore StopIteration quando tutti gli elementi sono già iterati.
Qui stiamo cercando di ottenere l'elemento successivo dall'iteratore dopo il completamento del ciclo for. Poiché l'iteratore è già esaurito, solleva un'eccezione StopIteration. Considerando che, utilizzando un iterabile, possiamo ripetere più volte utilizzando il ciclo for o ottenere elementi utilizzando l'indicizzazione.
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))> |
>
>
Produzione:
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>