La parola chiave yield in Python

Muhammad Waiz Khan 10 ottobre 2023
La parola chiave yield in Python

Questo tutorial spiegherà lo scopo e l’uso della parola chiave yield in Python. La parola chiave yield è un’istruzione Python usata per definire le funzioni del generatore in Python. L’istruzione yield può essere utilizzata solo all’interno del corpo della funzione.

La principale differenza tra una funzione generatore e una funzione regolare è che la funzione generatore contiene un’espressione yield invece dell’istruzione return. L’istruzione yield produce come output la serie di valori chiamata iteratore generatore. Nuovi valori dall’iteratore possono essere recuperati usando la funzione next() o il cicli for.

Ogni volta che viene chiamata la funzione next() o ad ogni iterazione del cicli for, l’istruzione yield restituisce o produce un nuovo valore e salva lo stato di esecuzione della posizione della funzione cioè i valori delle variabili locali, ecc. Ad ogni nuova chiamata o iterazione di funzione next(), l’istruzione yield riprende dall’ultimo stato salvato, a differenza dell’istruzione return che inizia ad ogni chiamata.

Codici di esempio della parola chiave yield in Python

Poiché il funzionamento dell’istruzione yield è chiaro, esaminiamo ora i suoi usi e codici di esempio. Supponiamo di avere una grande quantità di dati e che non possa essere caricata contemporaneamente in un oggetto iterabile, o di voler leggere i dati in modo più efficiente in termini di memoria. Possiamo creare una funzione generatore utilizzando l’istruzione yield; la funzione leggerà e produrrà il nuovo blocco di dati ad ogni iterazione o chiamata di funzione next().

Il codice di esempio sotto mostra come usare l’istruzione yield con il cicli for per creare una semplice funzione di generatore in Python. La funzione del generatore my_generator() nel codice di esempio sotto restituirà il nuovo numero da 1 a 100 e funzionerà fino a 99 chiamate.

def my_generator():
    for x in range(1, 100):
        print("new value is generated!")
        yield x

Avremo prima bisogno di un oggetto iteratore generatore per generare valori utilizzando la funzione next() o tramite iterazione.

gen_iter = my_generator()

Ora prendiamo i nuovi valori dall’iteratore del generatore usando la funzione next(); possiamo anche usare la funzione next() come iterator.__next__(), come mostrato nel codice di esempio sotto.

val = next(gen_iter)
print("Value =", val)

val = gen_iter.__next__()
print("Value =", val)

Produzione:

new value is generated!
Value = 1
new value is generated!
Value = 2

L’altro metodo per ottenere nuovi valori è iterare attraverso l’oggetto iteratore del generatore usando il cicli for; il codice di esempio seguente mostra come iterare attraverso l’oggetto iteratore del generatore in Python.

for val in gen_iter:
    print("Value =", val)

L’esempio di codice sopra genererà tutti i valori 99 dall’intervallo specificato nella funzione del generatore.

Possiamo anche creare una funzione generatore senza il cicli for utilizzando più volte l’istruzione yield, come mostrato nel codice di esempio sotto.

def my_generator():

    x = 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x

Ora, usiamo la nostra nuova funzione di generatore per generare tutti i valori usando il cicli for.

gen_iter = my_generator()
for val in gen_iter:
    print("Value =", val)

Produzione:

new value is generated!
Value = 1
new value is generated!
Value = 2
new value is generated!
Value = 3

Articolo correlato - Python Keyword