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)