Capire le Variabili Python: Una Guida Completa
Scopri come funzionano le variabili Python: assegnazione, tipizzazione dinamica, assegnazione multipla, operatori aumentati, None, del e scope.
Una variabile è un'etichetta con nome che punta a un valore memorizzato in memoria. Le variabili sono il modo principale per conservare, passare e trasformare i dati in qualsiasi programma Python. A differenza di alcuni linguaggi, Python non richiede di dichiarare un tipo — basta assegnare un valore e Python determina il tipo automaticamente.
Questa pagina tratta:
- Come creare e assegnare variabili
- Tipizzazione dinamica — cosa significa in pratica
- Assegnazione multipla e tuple unpacking
- Operatori di assegnazione aumentata
- Controllare il tipo di una variabile con
type() - Il valore speciale
None - Eliminare variabili con
del - Basi dello scope delle variabili
Capitoli correlati: Nomi delle Variabili · Variabili di Output · Assegnare Valori Multipli · Tipi di Dati Python · Variabili Globali · Scope Python
Creare una Variabile
Per creare una variabile, scrivi un nome, poi =, poi il valore. Python crea la variabile e la associa immediatamente a quel valore.
Assegnare una string e stamparla
John DoeQui name è il nome della variabile e "John Doe" è il valore. Il segno = è l'operatore di assegnazione — non è un test di uguaglianza (quello è ==).
I nomi delle variabili seguono alcune regole:
- Devono iniziare con una lettera o un trattino basso (
_), mai con una cifra. - Possono contenere lettere, cifre e trattini bassi.
- Sono case-sensitive —
score,ScoreeSCOREsono tre variabili diverse. - Non possono essere una parola chiave Python come
if,for,whileoclass.
Lo stile Python (PEP 8) raccomanda snake_case per i nomi delle variabili: parole minuscole unite da trattini bassi, come first_name o total_price. Per le best practice di denominazione, vedi Nomi delle Variabili.
Tipizzazione Dinamica
Python è tipizzato dinamicamente: una variabile non ha un tipo fisso. Il tipo è determinato dal valore attualmente assegnato ad essa e può cambiare quando viene riassegnata.
x = 10
print(type(x)) # <class 'int'>
x = "hello"
print(type(x)) # <class 'str'>
x = 3.14
print(type(x)) # <class 'float'><class 'int'>
<class 'str'>
<class 'float'>Questa flessibilità è comoda ma è anche una fonte comune di bug: se si sovrascrive accidentalmente una variabile con un valore del tipo sbagliato, Python non avvisa — solo un TypeError (o un risultato errato) a runtime lo rivelerà. I type hint (es. x: int = 10) sono un modo per documentare l'intento e rilevare tali errori in anticipo con un type checker. Vedi Python Type Hints per i dettagli.
Controllare il Tipo di una Variabile
Usa la funzione built-in type() per ispezionare quale tipo contiene attualmente una variabile:
name = "Alice"
age = 30
price = 9.99
active = True
print(type(name)) # <class 'str'>
print(type(age)) # <class 'int'>
print(type(price)) # <class 'float'>
print(type(active)) # <class 'bool'><class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>type() è particolarmente utile durante il debug — quando una variabile contiene un tipo inatteso, print(type(x)) è il modo più rapido per confermare cosa contiene effettivamente.
Variabili per Ogni Tipo di Dato
Python dispone di un ricco insieme di tipi built-in. Ecco un singolo blocco che crea una variabile per ogni tipo comune, così da vedere il pattern di denominazione a colpo d'occhio:
Assegnare variabili di tipi diversi
integer_val = 10 # int
float_val = 10.5 # float
complex_val = 10 + 5j # complex
string_val = "Hello, World!" # str
bool_val = True # bool
list_val = [1, 2, 3, 4, 5] # list (mutable, ordered)
tuple_val = (1, 2, 3, 4, 5) # tuple (immutable, ordered)
dict_val = {"key1": "value1"} # dict (key-value pairs)
set_val = {1, 2, 3, 4, 5} # set (unique, unordered)
none_val = None # NoneTypePer un approfondimento su quando scegliere ogni tipo, vedi Tipi di Dati Python.
Assegnazione Multipla
Assegnare lo Stesso Valore a Più Variabili
È possibile concatenare = per assegnare lo stesso valore a più variabili in una sola riga:
a = b = c = 0
print(a, b, c)0 0 0Questo è utile per inizializzare contatori o flag, ma occorre prestare attenzione con gli oggetti mutabili — a = b = c = [] fa sì che tutti e tre i nomi puntino alla stessa lista, quindi modificare uno cambia tutti e tre.
Tuple Unpacking
Assegna valori diversi a più variabili su una sola riga separandoli con virgole:
x, y, z = 1, 2, 3
print(x, y, z)1 2 3Python abbina i valori a destra ai nomi a sinistra nell'ordine. Il numero di nomi deve essere uguale al numero di valori, altrimenti si ottiene un ValueError. Per l'unpacking con asterisco (*) e nidificato, vedi Assegnare Valori Multipli.
Operatori di Assegnazione Aumentata
Un'assegnazione aumentata combina un'operazione con l'assegnazione in un unico passaggio. Invece di scrivere count = count + 1, si scrive count += 1:
count = 0
count += 1 # same as count = count + 1
print(count) # 1
total = 100
total -= 25 # same as total = total - 25
print(total) # 75
price = 10.0
price *= 1.2 # same as price = price * 1.2
print(price) # 12.01
75
12.0L'insieme completo degli operatori di assegnazione aumentata è +=, -=, *=, /=, //=, %=, **=, &=, |=, ^=, >>= e <<=. Funzionano su qualsiasi tipo che supporti l'operatore sottostante — per esempio, += su una string la concatena:
message = "Hello"
message += ", World!"
print(message)Hello, World!Aritmetica con le Variabili
Le variabili che contengono numeri possono essere usate in espressioni aritmetiche. Python valuta l'espressione e restituisce un nuovo valore:
Matematica con le variabili
a = 10
b = 20
print(a + b) # addition → 30
print(b - a) # subtraction → 10
print(a * b) # multiplication → 200
print(b / a) # division → 2.0 (always float in Python 3)
print(b // a) # floor division → 2
print(b % a) # modulo → 030
10
200
2.0
2
0Si noti che / restituisce sempre un float in Python 3, anche quando il risultato è un numero intero. Usa // quando hai bisogno di un quoziente intero.
Per l'elenco completo degli operatori (bitwise, di confronto, logici, di appartenenza, di identità), vedi Operatori Python.
Il Valore Speciale None
None è il modo di Python per rappresentare "nessun valore" o "niente". È l'unico valore del tipo NoneType:
result = None
print(result) # None
print(type(result)) # <class 'NoneType'>
print(result is None) # TrueNone
<class 'NoneType'>
TrueVerifica sempre None con is None (controllo di identità), non con == None (controllo di uguaglianza). Le funzioni che non restituiscono esplicitamente un valore restituiscono None per impostazione predefinita.
Eliminare una Variabile
Usa l'istruzione del per rimuovere il nome di una variabile dallo scope corrente. Dopo l'eliminazione, fare riferimento al nome genera un NameError:
temp = "temporary value"
print(temp) # temporary value
del temp
# print(temp) # NameError: name 'temp' is not defineddel viene usato principalmente per liberare memoria esplicitamente (es. dopo aver elaborato un grande dataset) o per pulire lo stato locale. Rimuove il binding del nome, non necessariamente l'oggetto sottostante — il garbage collector di Python recupera la memoria dell'oggetto quando nessun nome vi punta più.
Basi dello Scope delle Variabili
Il punto in cui una variabile è accessibile dipende da dove è definita. I due scope più comuni sono:
- Scope locale — una variabile creata all'interno di una funzione esiste solo per la durata di quella chiamata di funzione.
- Scope globale — una variabile creata al livello superiore di un modulo è accessibile da qualsiasi punto di quel modulo.
message = "I am global" # global variable
def greet():
greeting = "Hello" # local variable — not accessible outside
print(greeting)
print(message) # can read global variable
greet()
# print(greeting) # NameError — greeting does not exist hereHello
I am globalPer modificare una variabile globale dall'interno di una funzione è necessaria la parola chiave global. Vedi Variabili Globali e Scope Python per la regola LEGB completa.