Discuteremo di Python Iterator in questo articolo. Iteratore è un oggetto con stato e ricorda dove si trova e quando è iterato. Restituisce l'oggetto singolo. Utilizza i metodi Iter () e Next (). Questo viene utilizzato per formare i loop, le comprensioni e i generatori di Python.
Converti qualsiasi sequenza in iteratore usando la seguente sintassi:
ITER (sequenza)Per accedere all'elemento successivo, viene utilizzata la funzione successiva (). Qualsiasi oggetto in Python che supporta i due metodi precedenti è chiamato iteratore. Per verificare questo, eseguire il metodo integrato dir () su oggetto.
Esempio: stampa (dir (elenco))
Qui, l'elenco non è un iteratore poiché non ha il metodo "__Next__".
Se proviamo ad accedere ai prossimi elementi, otteniamo l'eccezione come segue:
Per convertirlo come iteratore, passare l'elenco al metodo iter come mostrato nel seguente. Successivamente, vediamo il metodo "__Next__".
Differenza tra iteratore e iterable
ITlable significa che possiamo eseguire il ciclo su valori come elenco, tupla, stringa ecc. Tutti gli oggetti hanno un metodo iter () che viene utilizzato per ottenere un iteratore. Vedremo alcuni esempi per capirlo meglio:
Esempio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | nums = [1,2,3,4,5] numSiterator = iter (nums) #same come numSiterator = nums.__iter __ () # internamente chiamerà __iter__ Dunder Method Stampa (Next (Numsiterator)) # Access 1st Element Stampa (Next (Numsiterator)) # Accesso 2 ° elemento Stampa (Next (Numsiterator)) # Accesso 3 ° elemento e così via .. Stampa (Next (Numsiterator)) Stampa (Next (Numsiterator)) Stampa (Next (Numsiterator)) |
Quando raggiungiamo la fine dell'elenco, aumenta un errore di stopiteration.
Nota: Tutto ciò che inizia con il doppio sottocore e termina con il doppio sottocore in Python è chiamato Dunder Method.
Usa il caso degli iteratori
Esempio 1:
Stampiamo ogni carattere usando il loop.
1 2 3 4 5 | S = "Buongiorno" per char in s: Stampa (char) |
Esempio 2:
Stampiamo la stessa stringa usando gli iteratori.
1 2 3 4 5 6 7 8 9 10 11 | S = "Buongiorno" word = iter (s) mentre è vero: Tentativo: Item = Next (Word) Stampa (articolo) Tranne la stopiteration: rottura |
Esempio 3:
Per costruire la nostra funzione di portata, la funzione di intervallo fornisce l'intervallo di valori dall'inizio alla fine (esclusiva).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | MyRange di classe: def __init __ (self, avvia, fermati): se stesso.Val = Avvia se stesso.stop = stop def __iter __ (self): Restituisci se stessi def __next __ (self): se sé.val> = self.fermare: Sollevare la taglio corrente = self.Val se stesso.Val += 1 Restituisci corrente nums = miRange (1,5) Stampa (Next (nums)) Stampa (Next (nums)) Stampa (Next (nums)) Stampa (Next (nums)) Stampa (Next (nums)) |
Scriviamo la funzione di gamma precedente usando il generatore.
Esempio 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def my_range (inizio, fine): corrente = avvio mentre corrente < end: Rendi corrente corrente += 1 nums = my_range (1,5) Stampa (Next (nums)) Stampa (Next (nums)) Stampa (Next (nums)) Stampa (Next (nums)) |
Oppure possiamo chiamare quanto segue che produce lo stesso output dell'esempio precedente.
1 2 3 | per num in nums: Stampa (num) |
Conclusione
L'iteratore non ha bisogno di finire fintanto che il valore è lì; ci tiene ottenere il valore. Prende un valore alla volta. È davvero utile quando si scrivono programmi efficienti dalla memoria in cui abbiamo alcuni valori che non possiamo mettere in memoria se li mettiamo in un elenco o in una tupla. Possiamo salvare la risorsa con questo.