I generatori sono delle speciali funzioni che restituiscono un iterabile, un esempio di generatore e’ la funzione range(x,y,z) usata per generare una sequenza di interi che parte da x fino ad y con passo z.
ad esempio la chiamata range(0,10,1) assegnata al comando print mi crea una lista di valori da 0 a 10 con passo 1
x = range(0,10,1)
print(list(x)
Questo codice restituira una lista [0,1,2,3,4,5,6,7,8,9]
Creiamo adesso un generatore che restituisca una lista di valori calcolati
def generatore(x):
for y in range(0,x)
y = y - 1
yield y
test = generatore(4)
print(list(test))
Questo codice resittuira’ una lista [-1,0,1,2]
Vediamo di capire come funziona. Alla prima chiamata di test = generatore(4) entro nella funzione generatore(x), la funziona mi genera un elenco di naturali che partono da 0 a 4, al primo ciclo y vale 0 -1 = -1, al secondo giro di for y = 1 -1 = 0 e cosi’ via.
Scrittura dei generatori in modalita’ COMPREHENSION
La modalita’ comprehension (compressa) e’ una modalita di scrittura in python molto utilizzata sia nei generatori che nelle creazione di strutture dati tipo liste, touple dizionari etc etc. vediamo ora come scrivere lo stesso generatore di prima in modalita’ comprehension:
test= ( y-1 for y in range(10))
print(list(test))
Queste due righe daranno come risultato lo stesso di quello precedente!
