W3docs

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:

OperatoreNomeEsempioRisultato
+Addizione17 + 522
-Sottrazione17 - 512
*Moltiplicazione17 * 585
/Divisione17 / 53.4
%Modulo (resto)17 % 52
**Esponenziazione2 ** 8256
//Divisione intera17 // 53

Due operatori meritano un'attenzione particolare:

  • / restituisce sempre un float in Python 3, anche quando si dividono due interi (4 / 2 restituisce 2.0, non 2).
  • // (divisione intera) arrotonda il risultato verso meno infinito, non verso zero. Quindi -7 // 2 è -4, non -3.
python— editable, runs on the server

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: even

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

OperatoreSignificatoEsempioRisultato
==Uguale a5 == 5True
!=Diverso da5 != 3True
>Maggiore di5 > 3True
<Minore di5 < 3False
>=Maggiore o uguale a5 >= 5True
<=Minore o uguale a5 <= 4False
python— editable, runs on the server

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)    # False

Attenzione: == 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.

OperatoreEquivalente aEsempio
=x = 10
+=x = x + nx += 3
-=x = x - nx -= 3
*=x = x * nx *= 3
/=x = x / nx /= 3
//=x = x // nx //= 3
%=x = x % nx %= 3
**=x = x ** nx **= 3
&=x = x & nx &= 0b1111
|=x = x | nx |= 0b1000
^=x = x ^ nx ^= 0b0101
<<=x = x << nx <<= 1
>>=x = x >> nx >>= 1
python— editable, runs on the server

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 items

Operatori Logici

Gli operatori logici combinano o invertono espressioni booleane. Python usa parole chiave in inglese anziché simboli (&&, ||, !).

OperatoreSignificatoEsempioRisultato
andVero se entrambi i lati sono veriTrue and FalseFalse
orVero se almeno uno dei lati è veroTrue or FalseTrue
notInverte il valore booleanonot TrueFalse
python— editable, runs on the server

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.

OperatoreSignificato
isTrue se entrambe le variabili fanno riferimento allo stesso oggetto
is notTrue se fanno riferimento a oggetti diversi
python— editable, runs on the server

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 style

Python 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).

OperatoreSignificato
inTrue se il valore si trova nella sequenza
not inTrue se il valore non si trova
python— editable, runs on the server

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.

OperatoreNomeEsempioRisultatoNote
&AND5 & 31Il bit è 1 solo se entrambi i bit sono 1
|OR5 | 37Il bit è 1 se almeno uno dei bit è 1
^XOR5 ^ 36Il bit è 1 se i bit sono diversi
~NOT~5-6Inverte tutti i bit; il risultato è -(n+1)
<<Scorrimento a sinistra5 << 110Sposta i bit a sinistra (moltiplica per 2)
>>Scorrimento a destra20 >> 25Sposta i bit a destra (divide per 2)
python— editable, runs on the server

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 efficienten << 1 è più veloce di n * 2 nei 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
10not
11and
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 → True

In caso di dubbio, usa le parentesi. Rendono la precedenza esplicita e migliorano la leggibilità.

CategoriaOperatoriUso principale
Aritmetici+ - * / % ** //Calcoli matematici
Confronto== != > < >= <=Condizioni, filtraggio
Assegnazione= += -= *= /= //= %= **= &= |= ^= <<= >>=Memorizzare e aggiornare variabili
Logiciand or notCombinare condizioni booleane
Identitàis is notControlli singleton (es. is None)
Appartenenzain not inRicerca 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.

Esercizio

Pratica
In quali delle seguenti categorie rientrano gli operatori Python?
In quali delle seguenti categorie rientrano gli operatori Python?
Was this page helpful?