Un iteratore è un oggetto che contiene un numero contato di qualità.
Un iteratore è un oggetto che può essere iterato dopo, il che significa che si può navigare attraverso tutte le qualità.
Tecnicamente, in Python, un iteratore è un oggetto che implementa il protocollo iteratore, che consiste dei metodi __iter__() e __next__().
Iteratore contro Iterabile
I record, le tuple, i riferimenti alle parole e i set sono per la maggior parte elementi iterabili. Sono supporti iterabili da cui è possibile ottenere un iteratore.
Ognuno di questi elementi ha una tecnica iter() che viene utilizzata per ottenere un iteratore:
Esempio
Restituire un iteratore da una tupla e stampare ogni valore:
mytuple =
(“mela”, “banana”, “ciliegia”)
myit = iter(mytuple)
stampa(myit)
stampa(myit)stampa(myit)stampa(myit)stampa(myit)
stampa(myit)stampa(myit)
Anche le stringhe sono oggetti iterabili, e possono restituire un iteratore:
Esempio
Le stringhe sono anche oggetti iterabili, contenenti una sequenza di caratteri:
mystr =
“banana”
myit = iter(mystr)
stampa(segue(myit))
stampa(segue(myit))
stampa(myit)stampa(myit)stampa
(myit)
stampa(myit)stampa(myit)stampa(myit)stampa(myit)stampa
(myit)stampa(myit))
Looping attraverso un Iterator
Possiamo anche usare un for loop per iterare attraverso un oggetto iterabile:
Esempio
Iterate i valori di una tupla:
mytuple =
(“mela”, “banana”, “ciliegia”)
per x in mytuple:
print(x)
Fai un Iterator
Per fare un elemento/classe come iteratore è necessario eseguire le tecniche __iter__() e __next__() al proprio articolo.
Come avete appreso nella parte Python Classes/Items, tutte le classi hanno una capacità chiamata __init__(), che permette di fare qualche introduzione quando l’articolo viene fatto.
La tecnica __iter__() agisce in modo comparabile, si possono eseguire compiti (istallazione e così via.), ma dovrebbe costantemente ripristinare l’oggetto iteratore stesso.
La tecnica __next__() consente inoltre di svolgere attività, e deve ripristinare la seguente cosa nel raggruppamento.
Esempio
Creare un iteratore che restituisca i numeri, a partire da 1, e ogni sequenza aumenterà di uno (restituendo 1,2,3,4,5 ecc.):
classe MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
ritorno x
myclass = MyNumbers()
myiter = iter(myclass)
stampa(myiter)
stampa(myiter)stampa(myiter)stampa(myiter)stampa(myiter)
stampa(myiter)stampa(myiter)stampa)
stampa(miiter)
stampa(miiter)stampa(miiter)stampa(miiter)
StopIteration
Il modello di cui sopra procedeva sempre nel caso in cui si avessero subito abbastanza proclami(), o nel caso in cui fosse utilizzato in un cerchio.
Per prevenire l’enfasi di andare avanti per sempre, possiamo utilizzare la spiegazione StopIteration.
Nel metodo __next__(), possiamo aggiungere una condizione di terminazione per segnalare un errore se l’iterazione viene eseguita un numero di volte specificato:
Esempio
Fermati dopo 20 iterazioni:
classe MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
se self.a <= 20:
x = self.a self.a
+= 1
ritorno x
altro:
aumentare StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
per x in myiter:
stampa(x)