I generatori in Python

Nel linguaggio python un generatore è una funzione che restituisce un iteratore.

def generatore():
yield x

Al posto di return i generatori usano il comando yield.

Il generatore ritorna un elemento alla volta di un iteratore se richiamato con la funzione next.

Qual è la differenza tra una funzione e un generatore? La funzione restituisce l'intera sequenza in una sola volta mentre il generatore soltanto un elemento alla volta. Quindi, i generatori sono più indicati per elaborare liste molto grandi o insiemi con infiniti valori.
la differenza tra funzioni e generatori in Python

Come funziona un generatore

Il generatore conserva in memoria le variabili locali anche dopo aver terminato l'esecuzione.

Pertanto, se il generatore viene chiamato più volte, fornisce gli elementi in sequenza uno dopo l'altro.

Attenzione. Quando il generatore esaurisce gli elementi dell'iteratore, se lo richiamo ulteriormente mostra un errore StopIteration. E' quindi opportuno aggiungere un'eccezione. Questo errore può essere invocato appositamente tramite l'istruzione raise stopiteration per forzare l'uscita dal generatore.

Il funzionamento dei generatori è simile agli iteratori.

Qual è la differenza tra iteratore e generatore? Gli iteratori sono oggetti o classi mentre i generatori sono funzioni. Il risultato finale è lo stesso.

    Un esempio pratico

    Creo una funzione generatore composto da un iteratore con tre elementi ( A, B, C ).

    def generatore():
    yield "A"
    yield "B"
    yield "C"

    Poi assegno il generatore all'oggetto prova.

    prova=generatore()

    Ora richiamo per la prima volta il generatore.

    print(next(prova))

    Ottengo in output il primo elemento dell'iteratore

    A

    Poi richiamo di nuovo il generatore con next.

    print(next(prova))

    Il generatore si ricorda l'ultimo elemento già consegnato (A) e restituisce il successivo (B).

    In output ottengo il secondo elemento dell'iteratore

    B

    Infine richiamo nuovamente il generatore sempre con next.

    print(next(prova))

    Il generatore restituisce in output il terzo elemento.

    C

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base
    1. Il linguaggio Python
    2. Come installare Python sul PC
    3. Come scrivere un programma in Python
    4. Come usare Python in modalità interattiva
    5. Le variabili
    6. I numeri
    7. Gli operatori logici
    8. Le strutture iterative ( o cicli )
    9. Le strutture condizionali
    10. I file in python