Introduzione agli Operatori Python
Scopri tutti i tipi di operatori Python — aritmetici, di confronto, di assegnazione, logici, bit a bit, identità e appartenenza — con esempi e regole di precedenza.
Gli operatori sono i simboli e le parole chiave che indicano a Python quale azione eseguire su uno o più valori. Ogni espressione Python significativa — da x + 1 a if age >= 18 — si basa su almeno un operatore. Python raggruppa i suoi operatori in sette categorie: aritmetici, di confronto, di assegnazione, logici, di identità, di appartenenza e bit a bit. Questo capitolo spiega ogni categoria, mostra quando usarla e mette in evidenza le insidie più comuni.
Operatori Aritmetici
Gli operatori aritmetici eseguono calcoli matematici. Python ne fornisce sette:
| Operatore | Nome | Esempio | Risultato |
|---|---|---|---|
+ | Addizione | 17 + 5 | 22 |
- | Sottrazione | 17 - 5 | 12 |
* | Moltiplicazione | 17 * 5 | 85 |
/ | Divisione | 17 / 5 | 3.4 |
% | Modulo (resto) | 17 % 5 | 2 |
** | Esponenziazione | 2 ** 8 | 256 |
// | Divisione intera | 17 // 5 | 3 |
Due operatori meritano un'attenzione particolare:
/restituisce sempre unfloatin Python 3, anche quando si dividono due interi (4 / 2restituisce2.0, non2).//(divisione intera) arrotonda il risultato verso meno infinito, non verso zero. Quindi-7 // 2è-4, non-3.
Uso comune: verificare pari o dispari
L'operatore modulo (%) è il metodo standard per verificare la divisibilità:
number = 42
if number % 2 == 0:
print("even")
else:
print("odd")
# Output: evenOperatori di Confronto
Gli operatori di confronto confrontano due valori e restituiscono sempre True o False. Vengono usati nelle condizioni, nei cicli while e ovunque sia necessario un risultato booleano.
| Operatore | Significato | Esempio | Risultato |
|---|---|---|---|
== | Uguale a | 5 == 5 | True |
!= | Diverso da | 5 != 3 | True |
> | Maggiore di | 5 > 3 | True |
< | Minore di | 5 < 3 | False |
>= | Maggiore o uguale a | 5 >= 5 | True |
<= | Minore o uguale a | 5 <= 4 | False |
Concatenazione di confronti
Python consente di concatenare più confronti in un'unica espressione, che risulta più naturale da leggere rispetto alla maggior parte degli altri linguaggi:
x = 7
print(1 < x < 10) # True — equivalent to (1 < x) and (x < 10)
print(0 < x < 5) # FalseAttenzione: == vs =
= è l'operatore di assegnazione; == verifica l'uguaglianza. Usare = all'interno di una condizione genera un SyntaxError in Python (a differenza di altri linguaggi dove assegna silenziosamente).
Operatori di Assegnazione
Gli operatori di assegnazione memorizzano valori nelle variabili. Le forme composte (+=, -=, …) combinano un'operazione aritmetica o bit a bit con l'assegnazione, rendendo il codice più conciso.
| Operatore | Equivalente a | Esempio |
|---|---|---|
= | — | x = 10 |
+= | x = x + n | x += 3 |
-= | x = x - n | x -= 3 |
*= | x = x * n | x *= 3 |
/= | x = x / n | x /= 3 |
//= | x = x // n | x //= 3 |
%= | x = x % n | x %= 3 |
**= | x = x ** n | x **= 3 |
&= | x = x & n | x &= 0b1111 |
|= | x = x | n | x |= 0b1000 |
^= | x = x ^ n | x ^= 0b0101 |
<<= | x = x << n | x <<= 1 |
>>= | x = x >> n | x >>= 1 |
L'operatore walrus := (Python 3.8+)
L'operatore walrus assegna un valore all'interno di un'espressione. È utile quando si vuole sia valutare che memorizzare un risultato senza scrivere l'espressione due volte:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Without walrus: compute length twice
if len(numbers) > 5:
print(f"Long list: {len(numbers)} items")
# With walrus: assign once, use in condition and body
if (n := len(numbers)) > 5:
print(f"Long list: {n} items")
# Output: Long list: 10 itemsOperatori Logici
Gli operatori logici combinano o invertono espressioni booleane. Python usa parole chiave in inglese anziché simboli (&&, ||, !).
| Operatore | Significato | Esempio | Risultato |
|---|---|---|---|
and | Vero se entrambi i lati sono veri | True and False | False |
or | Vero se almeno uno dei lati è vero | True or False | True |
not | Inverte il valore booleano | not True | False |
Valutazione in cortocircuito
Python valuta and e or in modo pigro (da sinistra a destra) e si ferma non appena il risultato è determinato:
False and <anything>— il lato destro non viene mai valutato.True or <anything>— il lato destro non viene mai valutato.
Questo è importante quando il lato destro ha un effetto collaterale o potrebbe generare un errore:
user_input = ""
name = user_input or "Anonymous"
print(name) # Anonymous (empty string is falsy, so "Anonymous" is returned)Valori truthy e falsy
Gli operatori logici funzionano con qualsiasi valore, non solo con True/False. Python tratta 0, "", None, [], {} e () come falsy; tutto il resto è truthy.
Consulta il capitolo Python Data Types per un elenco completo dei valori falsy per tipo.
Operatori di Identità
Gli operatori di identità verificano se due variabili puntano allo stesso oggetto in memoria, non solo se contengono valori uguali.
| Operatore | Significato |
|---|---|
is | True se entrambe le variabili fanno riferimento allo stesso oggetto |
is not | True se fanno riferimento a oggetti diversi |
Quando usare is vs ==
Usa is solo quando intendi deliberatamente verificare l'identità dell'oggetto — più comunemente quando si confronta con singleton:
value = None
if value is None: # correct idiom
print("No value provided")
# Never do: if value == None — works but is considered bad stylePython memorizza nella cache i piccoli interi (tipicamente da -5 a 256) e le stringhe internate, quindi a is b può restituire True per due piccoli interi creati separatamente. Non fare mai affidamento su questo comportamento per interi o stringhe — usa == per l'uguaglianza di valori.
Operatori di Appartenenza
Gli operatori di appartenenza verificano se un valore esiste all'interno di una sequenza (lista, tupla, string, set o dizionario).
| Operatore | Significato |
|---|---|
in | True se il valore si trova nella sequenza |
not in | True se il valore non si trova |
Nota sulle prestazioni
Per liste e tuple, in controlla ogni elemento sequenzialmente (O(n)). Per i set e le chiavi dei dizionari, in usa una tabella hash e opera in tempo costante (O(1)). Preferisci un set quando hai bisogno di molti test di appartenenza su una grande raccolta.
Operatori Bit a Bit
Gli operatori bit a bit lavorano sulla rappresentazione binaria degli interi, manipolando i singoli bit.
| Operatore | Nome | Esempio | Risultato | Note |
|---|---|---|---|---|
& | AND | 5 & 3 | 1 | Il bit è 1 solo se entrambi i bit sono 1 |
| | OR | 5 | 3 | 7 | Il bit è 1 se almeno uno dei bit è 1 |
^ | XOR | 5 ^ 3 | 6 | Il bit è 1 se i bit sono diversi |
~ | NOT | ~5 | -6 | Inverte tutti i bit; il risultato è -(n+1) |
<< | Scorrimento a sinistra | 5 << 1 | 10 | Sposta i bit a sinistra (moltiplica per 2) |
>> | Scorrimento a destra | 20 >> 2 | 5 | Sposta i bit a destra (divide per 2) |
Perché gli operatori bit a bit sono importanti
Nella maggior parte del codice Python quotidiano non userai gli operatori bit a bit direttamente, ma compaiono frequentemente in:
- Flag e permessi — combinare bitmask per rappresentare più opzioni in un singolo intero.
- Crittografia e hashing — XOR è un blocco costitutivo di base.
- Matematica efficiente —
n << 1è più veloce din * 2nei cicli critici per le prestazioni. - Lavoro con protocolli binari — analisi di pacchetti di rete o intestazioni di file.
Precedenza degli Operatori
Quando un'espressione mescola più operatori, Python li valuta in un ordine fisso (la precedenza più alta per prima):
| Priorità | Operatori |
|---|---|
| 1 (più alta) | ** |
| 2 | +x, -x, ~x (unario) |
| 3 | *, /, //, % |
| 4 | +, - |
| 5 | <<, >> |
| 6 | & |
| 7 | ^ |
| 8 | | |
| 9 | ==, !=, <, >, <=, >=, is, is not, in, not in |
| 10 | not |
| 11 | and |
| 12 (più bassa) | or |
# Multiplication before addition (standard math rules apply)
print(2 + 3 * 4) # 14, not 20
# Use parentheses to override
print((2 + 3) * 4) # 20
# ** is right-associative: 2 ** 3 ** 2 = 2 ** (3**2) = 2**9
print(2 ** 3 ** 2) # 512, not 64
# Comparisons before logical operators
print(2 + 3 > 4 and 10 % 3 == 1) # True and True → TrueIn caso di dubbio, usa le parentesi. Rendono la precedenza esplicita e migliorano la leggibilità.
Riepilogo
| Categoria | Operatori | Uso principale |
|---|---|---|
| Aritmetici | + - * / % ** // | Calcoli matematici |
| Confronto | == != > < >= <= | Condizioni, filtraggio |
| Assegnazione | = += -= *= /= //= %= **= &= |= ^= <<= >>= | Memorizzare e aggiornare variabili |
| Logici | and or not | Combinare condizioni booleane |
| Identità | is is not | Controlli singleton (es. is None) |
| Appartenenza | in not in | Ricerca in sequenze e set |
| Bit a bit | & | ^ ~ << >> | Flag binari, dati di basso livello |
Per argomenti correlati, vedi Python Variables, Python If...Else e Python Data Types.