Concetti Chiave
- La comprehension consente di generare una nuova lista o struttura partendo da una sequenza attraverso una sintassi compatta.
- Le comprehension possono essere utilizzate nei dizionari, ma non esistono comprehension per le tuple; le espressioni simili producono generatori.
- I generatori, creati con la notazione di comprehension, generano elementi uno alla volta e possono essere utilizzati in funzioni che accettano sequenze o iteratori.
- Il comando yield all'interno di una funzione definisce un generatore, restituendo valori e sospendendo la funzione fino alla successiva chiamata.
- I parametri di una funzione possono essere posizionali o di default, con i parametri di default che devono seguire quelli posizionali.
La comprehension (comprensione) è quell'operazione concettuale che permette di passare da una proprietà alla sua estensione
[espressione for nome in sequenza serie di for e/o if ]
Equivalente a
Res=[]
For nome in sequenza :
serie di for e/o if
res.append(espressione)
Return res
Espressione può essere molte cose e può includere altre comprehension
Utilizzo nei dizionari e tuple
Sui dizionari {chiave:val for nomi in sequenza}
Non c’è comprehension sulle tuple
Tuttavia espresssioni che sembrano "comprehension di tuple" sono legali, ma non danno tuple, bensì generatori
G=(i for i in range(3))
Un generatore è una sorta di "tupla in potenza" che genera uno dopo l'altro gli elementi della tupla, per mezzo della funzione predefinita next()
Next(g) : stampa 0
Next(g) : stampa 1
Next(g) : stampa 2
Next(g) : non stampa più nulla, il generatore g è esaurito
Tale notazione può essere usata anche all’interno di funzioni che si aspettano sequenze o iteratori, per esempio se voglio calcolare
>>> sum( i f o r i i n r ang e (21) i f i % 6 != 0)
154
Comando yield e parametri
Comando yield
Il comando yield deve comparire all'interno di una def di funzione. La presenza di yield fa sì che la def definisca un generatore
Yield espressione
Restituisce il valore di espressione al chiamante e sospende la valutazione della funzione
Parametri
- parametri posizionali (nome)
- parametri default (nome=espressione)
Se ci sono argomenti opzionali, i parametri di default devono seguire quelli ordinari
Domande da interrogazione
- Cos'è la comprensione e come si applica in Python?
- Qual è la differenza tra una tupla e un generatore in Python?
- Come funziona il comando `yield` in una funzione?
La comprensione è un'operazione concettuale che consente di passare da una proprietà alla sua estensione, utilizzata in Python per generare liste, dizionari e generatori in modo conciso. Ad esempio, si può utilizzare la sintassi `{chiave:val for nomi in sequenza}` per i dizionari.
Sebbene esistano espressioni che sembrano "comprehension di tuple", in realtà non producono tuple ma generatori. Un generatore, come `G=(i for i in range(3))`, genera gli elementi uno alla volta tramite la funzione `next()`, mentre una tupla è una collezione immutabile di elementi.
Il comando `yield`, quando utilizzato all'interno di una funzione, trasforma la funzione in un generatore. Restituisce un valore al chiamante e sospende l'esecuzione della funzione, permettendo di riprendere da quel punto in un secondo momento.