Menu
Coddy logo textTech

Implementare __next__()

Lezione 5 di 13 del corso Iteratori in Python di Coddy.

Il metodo __next__() è una parte fondamentale della creazione di iteratori personalizzati in Python. Definisce come recuperare l'elemento successivo nella sequenza di iterazione. Quando implementi __next__(), controlli il comportamento del tuo iteratore, determinando quali valori produce e quando deve fermarsi.

Scopo di __next__()

Il metodo __next__() ha due scopi principali:

  1. Restituire l'elemento successivo nella sequenza
  2. Sollevare un'eccezione StopIteration quando non ci sono più elementi

Implementare __next__()

Ecco una struttura di base per implementare __next__():

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index]
        self.index += 1
        return result

Aspetti chiave di __next__()

  • Gestione dello stato: Tieni traccia dello stato corrente dell'iterazione (ad esempio, usando un indice).
  • Restituire l'elemento successivo: Determina e restituisci l'elemento successivo nella sequenza.
  • StopIteration: Solleva StopIteration quando non ci sono più elementi.
  • Effetti collaterali: Aggiorna lo stato interno necessario per l'iterazione successiva.

Esempio: iteratore di intervallo personalizzato

Ecco un esempio di iteratore personalizzato che imita una versione semplificata di range()</function> di Python:</p> <pre><code class="language-python">class CustomRange: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self def __next__(self): if self.current >= self.end: raise StopIteration result = self.current self.current += 1 return result # Using the custom range iterator for num in CustomRange(1, 5): print(num) # Outputs: 1, 2, 3, 4

In questo esempio, __next__() restituisce il numero corrente e lo incrementa per l'iterazione successiva, sollevando StopIteration quando raggiunge il valore finale.

Implementando __next__(), definisci il comportamento fondamentale del tuo iteratore, consentendogli di funzionare senza problemi con i meccanismi di iterazione di Python, come i cicli for e la funzione next().

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

challenge icon

Sfida

Facile

Crea una classe iteratore personalizzata chiamata FibonacciIterator che genera numeri di Fibonacci fino a un limite specificato. La sequenza di Fibonacci inizia con 0 e 1, e ogni numero successivo è la somma dei due precedenti.

Ti viene fornito quanto segue:

  • Un intero limit come input

La tua classe FibonacciIterator dovrebbe:

  • Implementare il metodo __next__() per generare il numero di Fibonacci successivo
  • Interrompere l'iterazione quando il numero di Fibonacci successivo supererebbe il limite specificato
  • Sollevare un'eccezione StopIteration quando la sequenza è esaurita

Dopo aver implementato la classe FibonacciIterator, creane un'istanza usando il limite fornito come input e stampa ogni numero di Fibonacci generato su una nuova riga.

L'input verrà fornito come una stringa che rappresenta un intero.

Provalo tu

# Leggi l'input
limit = int(input())

class FibonacciIterator:
    def __init__(self, limit):
        self.limit = limit
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        # TODO: Implementa il metodo __next__()
        # Genera il prossimo numero di Fibonacci
        # Genera StopIteration quando la sequenza è terminata
        pass

# Crea un'istanza di FibonacciIterator
fib_iterator = FibonacciIterator(limit)

# TODO: Scorri la sequenza di Fibonacci e stampa ogni numero

# Nota: Assicurati di stampare ogni numero di Fibonacci per superare i test

Tutte le lezioni di Iteratori in Python

Esercitati da solo: Compilatore Python online