Iteratore Python
- Pagina precedente Ereditarietà Python
- Pagina successiva Ambito Python
Iteratore Python
L'iteratore è un oggetto che contiene un numero contabile di valori.
L'iteratore è un oggetto iterabile, il che significa che puoi esplorare tutti i valori.
Technicamente, in Python, l'iteratore è un oggetto che implementa il protocollo dell'iteratore, che contiene i metodi __iter__()
e __next__()
.
Iteratore VS Oggetto Iterabile (Iterable)
Elenco, tuple, dizionario e set sono oggetti iterabili. Sono contenitori iterabili dai quali è possibile ottenere un iteratore (Iterator).
Tutti questi oggetti hanno un metodo per ottenere l'iteratore iter()
Metodo:
Esempio
Restituire un iteratore dal tuple e stampare ogni valore:
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Anche le stringhe sono oggetti iterabili e possono restituire un iteratore:
Esempio
Anche le stringhe sono oggetti iterabili, che contengono una serie di caratteri:
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
Esplorazione dell'iteratore
Possiamo anche utilizzare un ciclo for per esplorare gli oggetti iterabili:
Esempio
Iterare sui valori del tuple:
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Esempio
Iterare sui caratteri della stringa:
mystr = "banana" for x in mystr: print(x)
Suggerimento:Il ciclo for crea effettivamente un oggetto iteratore e esegue per ogni esecuzione del ciclo next()
metodo.
creazione dell'iteratore
Per creare un oggetto/cla come iteratore, è necessario implementare per l'oggetto __iter__()
e __next__()
metodo.
Come hai imparato nel capitolo delle classi/oggetti in Python, tutte le classi hanno un metodo chiamato __init__()
La funzione, che consente di eseguire alcune inizializzazioni durante la creazione dell'oggetto.
__iter__()
Il metodo ha una funzione simile, puoi eseguire operazioni (inizializzazione ecc.) ma devi sempre restituire l'oggetto iteratore stesso.
__next__()
Il metodo consente anche di eseguire operazioni e deve restituire l'elemento successivo della sequenza.
Esempio
Creare un iteratore che restituisce numeri, iniziando da 1, con ogni sequenza che aumenta di 1 (restituisce 1, 2, 3, 4, 5 ecc...):
class MyNumbers: def __iter__(self): self.a = 1 restituire self def __next__(self): x = self.a self.a += 1 restituire x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
StopIteration
Se hai abbastanza next()
istruzione, o nell'uso del ciclo for, l'esempio sopra continuerà per sempre.
Per prevenire che l'iterazione continui per sempre, possiamo utilizzare StopIteration
istruzione.
in __next__()
In un metodo, se l'iterazione è completata un numero specificato di volte, possiamo aggiungere una condizione di terminazione per sollevare un errore:
Esempio
Fermare dopo 20 iterazioni:
class MyNumbers: def __iter__(self): self.a = 1 restituire self def __next__(self): se self.a <= 20: x = self.a self.a += 1 restituire x else: sollevare StopIteration myclass = MyNumbers() myiter = iter(myclass) per x in myiter: print(x)
- Pagina precedente Ereditarietà Python
- Pagina successiva Ambito Python