Le variabili
In questa sezione vedremo con quali strutture i programmi riescono a memorizzare i dati su cui stanno lavorando e di che tipo questi possono essere.
Memoria di lavoro
Nel processo di elaborazione all'interno di un programma, il computer ha bisogno di un'area di lavoro dove memorizzare temporaneamente i dati. Per capire meglio questo meccanismo puoi immaginare il programma come se fosse uno studente che deve risolvere un esercizio di matematica in classe. Egli userà la lavagna come un'area di lavoro dove annotare, man mano che procede nella risoluzione dell'esercizio, tutti i passaggi e i valori intermedi nell'elaborazione della soluzione.
Analogamente, il programma affronta problemi computazionali e ha bisogno di un luogo per memorizzare temporaneamente i dati. Puoi visualizzare queste aree di memoria come delle "scatole" all'interno delle quali si possono inserire dei valori, consentendo al programma di salvare i risultati intermedi, le informazioni di input e i dati di elaborazione. Come uno studente annota i passaggi intermedi durante la risoluzione del problema alla lavagna, così il programma usa le "scatole" come dei segnaposti che consentono di lavorare con i dati in modo dinamico.
In informatica le aree di memoria adibite al salvataggio dei dati vengono chiamate variabili, a indicare il fatto che i valori contenuti in esse possono cambiare nel tempo.
La sintassi per creare una variabile in Python è molto semplice: basta scrivere il nome che si vuole dare alla variabile seguito da un segno di uguale =
e il valore che si vuole assegnare alla variabile. Ad esempio, per creare una variabile chiamata numero
e assegnarle il valore 5
, si scrive numero = 5
.
Nell'esempio seguente viene creata una variabile chiamata nome
e le viene assegnato il valore "Mario"
. Nella riga successiva viene stampato un messaggio che include il valore della variabile nome
.
nome = "Mario"
print("It's me, " + nome)
Dare un nome alle variabili
Così come nelle nostre cantine di casa gli scatoloni vengono etichettati con dei nomi significativi per consentirci di distinguerli l'uno dall'altro, indicando magari qual è il contenuto dello scatolone, anche le variabili hanno bisogno di un identificatore che consenta ai programmatori di far loro riferimento per poter assegnare, modificare e recuperare dati durante l'esecuzione del programma.
Nella mia cantina, ad esempio, ho uno scatolone con scritto in pennarello Decorazioni di Natale
. È intuitivo capire cosa c'è dentro e come distinguere la scatola delle palle dell'albero di Natale dal quella che contiene i miei vecchi quaderni di scuola. Se invece di scrivere sulle scatole Decorazioni di Natale
, Quaderni di scuola
, Vestiti dismessi
avessi scritto semplicemente X
, Y
e Z
, dopo qualche tempo non sarei più in grado di ricordare cosa c'è in ogni scatola.
Allo stesso modo devi avere particolare cura nel naming delle variabili. I nomi devono essere sufficientemente descrittivi da non richiedere l'uso di commenti per capire lo scopo per cui la variabile è stata creata.
Prendi in considerazione i due seguenti script. È lo stesso identico programma, ma il secondo codice è molto più facile da capire del primo, anche senza l'uso di commenti.
- Bad
- Good
x = 5
y = 3
z = 8
w = 4
r = 2
a = x * y
b = a * z
c = 0.5 * w * z
d = 2 * 3.14 * r
print(f"Risultato A: {a}")
print(f"Risultato B: {b}")
print(f"Risultato C: {c}")
print(f"Risultato D: {d}")
lunghezza_rettangolo = 5
larghezza_rettangolo = 3
altezza_prisma = 8
base_triangolo = 4
raggio_cerchio = 2
area_rettangolo = lunghezza_rettangolo * larghezza_rettangolo
volume_prisma = area_rettangolo * altezza_prisma
area_triangolo = 0.5 * base_triangolo * altezza_prisma
circonferenza_cerchio = 2 * 3.14 * raggio_cerchio
print(f"L'area del rettangolo è: {area_rettangolo}")
print(f"Il volume del prisma è: {volume_prisma}")
print(f"L'area del triangolo è: {area_triangolo}")
print(f"La circonferenza del cerchio è: {circonferenza_cerchio}")
Regole sul naming
Ci sono alcune regole da seguire quando si sceglie un nome per una variabile:
- Inizio con una lettera o underscore
_
: il nome di una variabile deve iniziare con una lettera(a-z, A-Z)
o un underscore(_)
. Non è consigliato iniziare con un numero. - Composto da lettere, numeri e underscore: dopo la prima lettera è possibile utilizzare lettere, numeri e underscore nel nome della variabile. Evita l'uso di caratteri speciali come
!
,@
,#
,$
,%
, ecc. - Evita parole riservate: non utilizzate parole riservate del linguaggio. Ad esempio, non chiamate una variabile
print
oif
, poiché queste sono parole chiave del linguaggio. - Case-sensitive: Python è case-sensitive, il che significa che le variabili chiamate
mioNome
emionome
sono considerate diverse.
Tipi di dato
Quando devi riporre degli oggetti, per non sprecare inutilmente spazio sceglierai scatole della dimensione adatta. Ad esempio, quando disfi l'albero di Natale, impiegherai scatole di dimensioni diverse per riporre le palline e l'albero stesso.
Anche i linguaggi di programmazione, quando riservano della memoria per le variabili, devono conoscere la quantità di spazio che verrà utilizzata. La dimensione di memoria occupata dipende dal tipo del dato in questione. Ad esempio, la memoria occupata da un carattere in una stringa sarà diversa rispetto a quella di una cifra di un numero intero.
Ogni variabile è dunque tipizzata, ovvero ha un suo tipo di dato. I tipi più comuni nella programmazione sono:
- i numeri interi, chiamati per l'appunto interi e abbreviati con la parola chiave
int
; - i numeri decimali, chiamati
float
; - il testo, chiamato stringa e abbreviato
str
; - i valori di verità, chiamato booleani e abbreviato con
bool
.
numero_intero = 10 # tipo int
numero_decimale = 3.14 # tipo float
testo = "hello" # tipo str
condizione = True # tipo bool
Se vuoi conoscere il tipo di una variabile, puoi usare la funzione type()
:
esempio1 = 10
esempio2 = "10"
print(type(esempio1))
print(type(esempio2))
Conoscere il tipo di una variabile è importante perché determina le operazioni che possono essere eseguite su quella variabile. Osserva il seguente esempio:
esempio1 = 10
esempio2 = "10"
print(esempio1 * 10)
print(esempio2 * 10)
Questo esempio mostra come l'operazione di moltiplicazione abbia comportamenti diversi per un intero e una stringa.
print(esempio1 * 10)
moltiplica il valore di esempio1
(che è 10) per 10. Quindi, stampa il risultato di 10 * 10, che è 100.
print(esempio2 * 10)
, invece, moltiplica la stringa esempio2
(che è "10") per dieci. In Python, moltiplicare una stringa per un numero n significa ripetere quella stringa n volte. Quindi, stampa la stringa "10" ripetuta 10 volte.
Tipizzazione dinamica
Python è un linguaggio a tipizzazione dinamica. Questo significa principalmente due cose:
- l'interprete determina durante l'esecuzione il tipo delle variabili, deducendolo dal tipo di dato che le viene assegnato;
- il tipo di una variabile può cambiare durante l'esecuzione del programma. A differenza di linguaggi a tipizzazione statica, dove il tipo di una variabile deve essere dichiarato esplicitamente e non può cambiare, Python consente ai tipi delle variabili di essere determinati dinamicamente in base al valore assegnato.
Annotazioni
Anche se Python è un linguaggio a tipizzazione dinamica, è possibile specificare il tipo di una variabile utilizzando le annotazioni. Le annotazioni sono una funzionalità introdotta in Python 3.6 che consente di specificare esplicitamente il tipo di una variabile. Le annotazioni possono essere utili per migliorare la leggibilità del codice e per strumenti che lo analizzano, come ad esempio gli IDE, che sfruttano queste informazioni per fornire suggerimenti e controlli di tipo.
Le annotazioni del tipo non influenzano in alcun modo l'esecuzione del programma, ma servono come documentazione e guida per chi legge il codice.
Per aggiungere un'annotazione del tipo ad una variabile si utilizza la sintassi nome_variabile: tipo
.
Esempio:
# Annotazione del tipo per una variabile intera
numero: int = 10
# Annotazione del tipo per una variabile stringa
testo: str = "Adoro le annotazioni!"
Ricorda che...
- Le variabili sono delle "scatole" in cui il programma può memorizzare i dati temporaneamente.
- È importante dare nomi significativi alle variabili per renderle facilmente riconoscibili.
- Ogni variabile ha un tipo di dato associato, che determina le operazioni che possono essere eseguite su di essa.
- Python è un linguaggio a tipizzazione dinamica, ma è possibile specificare il tipo di una variabile utilizzando le annotazioni. Queste non influenzano l'esecuzione del programma, ma servono come documentazione e guida per chi legge il codice.