Implementare __iter__()
Lezione 4 di 13 del corso Iteratori in Python di Coddy.
Creare un iteratore personalizzato in Python comporta l'implementazione del metodo __iter__() in una classe. Questo metodo è una parte fondamentale del protocollo degli iteratori e ti consente di definire il comportamento del tuo oggetto personalizzato come iteratore.
Il metodo __iter__()
Il metodo __iter__() ha due scopi principali:
- Rende un oggetto iterabile.
- Restituisce l'oggetto iteratore stesso.
Ecco la struttura di base di una classe con un metodo __iter__():
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
Implementare __iter__()
Per implementare __iter__() nella tua classe personalizzata:
- Definisci il metodo
__iter__()all'interno della tua classe. - Il metodo dovrebbe restituire l'oggetto iteratore stesso (di solito
self).
Ecco un esempio di un semplice iteratore personalizzato:
class CountDown:
def __init__(self, start):
self.start = start
def __iter__(self):
# Return the iterator object (self)
return self
def __next__(self):
if self.start <= 0:
raise StopIteration
self.start -= 1
return self.start + 1
# Using the custom iterator
countdown = CountDown(5)
for num in countdown:
print(num)
In questo esempio, il metodo __iter__() restituisce self, rendendo l'oggetto CountDown sia iterabile sia il proprio iteratore.
Punti chiave
- Il metodo
__iter__()viene chiamato quando usi la funzioneiter()su un oggetto o quando lo usi in un ciclo for. - Restituire
selfin__iter__()è comune quando la classe implementa sia__iter__()sia__next__(). - Se la tua classe implementa solo
__iter__(), dovrebbe restituire un oggetto iteratore separato che abbia un metodo__next__().
Implementando __iter__(), rendi iterabili i tuoi oggetti personalizzati, consentendo di usarli nei cicli for e in altre operazioni basate sugli iteratori in Python.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Sfida
FacileCrea una classe iteratore personalizzata chiamata AlphabetIterator che genera le lettere maiuscole dell'alfabeto inglese. L'iteratore dovrebbe iniziare da 'A' e continuare fino a una lettera specificata.
Ti viene fornito quanto segue:
- Una singola lettera maiuscola come input (ad es., 'E', 'K', 'Z')
La tua classe AlphabetIterator dovrebbe:
- Implementare il metodo
__iter__()per rendere l'oggetto iterabile - Generare lettere maiuscole a partire da 'A'
- Fermarsi quando raggiunge la lettera specificata nell'input (inclusa)
Dopo aver implementato la classe AlphabetIterator, creane un'istanza usando la lettera di input e stampa ogni lettera generata su una nuova riga.
L'input verrà fornito come una stringa contenente una singola lettera maiuscola.
Provalo tu
# Leggi l'input
end_letter = input().strip()
class AlphabetIterator:
def __init__(self, end_letter):
self.end_letter = end_letter
self.current_letter = 'A'
def __iter__(self):
return self
# TODO: Implementa il metodo __next__()
# Crea un'istanza di AlphabetIterator
alphabet_iter = AlphabetIterator(end_letter)
# TODO: Itera su AlphabetIterator e stampa ogni lettera
# Nota: Assicurati di stampare ogni lettera su una nuova rigaTutte le lezioni di Iteratori in Python
Esercitati da solo: Compilatore Python online