I Generatori
I generatori sono un tipo di iterabile, come le liste e le tuple. Ma a differenza delle liste, i generatori non permettono l’indicizzazione con indici arbitrari, ma possono comunque essere iterati attraverso i cicli for.
Per definire questi generatori si utilizza la clausola yield, in sostituzione di return all’interno di una funzione.
def conteggio():
i = 0
while i <= 5:
yield i
i += 1
for i in conteggio():
print(i)
eseguiamo
>>>
0
1
2
3
4
5
Mentre le liste hanno problemi di restrizioni di memoria, i generatori non lo hanno affatto e possono essere infiniti.
Riassumendo, i generatori ti permettono di dichiarare una funzione che si comporti come un iteratore, utilizzandola poi in un ciclo for.
Inoltre è possibile convertire i generatori in liste passandoli come argomento della funzione list().
def conteggio():
i = 0
while i <= 5:
yield i
i += 1
lista = list(conteggio())
print(lista)
eseguendo
>>>
[0, 1, 2, 3, 4, 5]
L’utilizzo dei generatori incrementa di molto la performance del codice, diminuendo di molto l’utilizzo di memoria da parte del programma. Dato che non sia alcuna generazione di valori, assegnazione ed attendere il tempo che queste operazioni vengano effettuate dal processore.
⇐ Vai a Lezione 6.3 – Map and Filter
Vai a Lezione 6.5 – I decoratori ⇒