Sobes.tech
Junior — Middle

Qual è il ruolo dei metodi speciali (dunder) nell'implementazione dei generatori e nel loro utilizzo in Python?

sobes.tech AI

Risposta dell'AI

In Python, i metodi speciali (metodi dunder), come __iter__(), __next__(), svolgono un ruolo chiave nell'implementazione di generatori e iteratori.

I generatori sono oggetti che consentono di iterare su una sequenza di valori, calcolandoli al bisogno, anziché immediatamente.

  • __iter__() restituisce l'iteratore dell'oggetto (spesso l'oggetto stesso).
  • __next__() restituisce il prossimo elemento della sequenza o solleva un'eccezione StopIteration quando gli elementi sono esauriti.

Quando crei un generatore usando una funzione con la parola chiave yield, Python crea automaticamente un oggetto generatore con questi metodi.

Esempio di implementazione di un semplice iteratore usando metodi dunder:

class CountUpTo:
    def __init__(self, max):
        self.max = max
        self.current = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.max:
            raise StopIteration
        self.current += 1
        return self.current

for number in CountUpTo(3):
    print(number)

In questo modo, i metodi dunder forniscono il protocollo di iterazione, che è alla base dei generatori e permette di usarli in cicli e altre strutture che lavorano con oggetti iterabili.