W3docs

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

python— editable, runs on the server
John Doe

Qui 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-sensitivescore, Score e SCORE sono tre variabili diverse.
  • Non possono essere una parola chiave Python come if, for, while o class.

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                        # NoneType

Per 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 0

Questo è 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 3

Python 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.0
1
75
12.0

L'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         → 0
30
10
200
2.0
2
0

Si 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) # True
None
<class 'NoneType'>
True

Verifica 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 defined

del 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 here
Hello
I am global

Per 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.

Esercitazione

Pratica
In Python, which of the following is true about variables?
In Python, which of the following is true about variables?
Was this page helpful?