Menu

Operatori in Python: aritmetici, di confronto, logici, di appartenenza e di identità

Un giro completo tra gli operatori di Python (aritmetici, di confronto, logici, di assegnazione, di appartenenza e di identità) con esempi per ciascuno.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Gli operatori sono solo simboli per delle azioni

Un operatore è un simbolo (o una breve parola chiave) che dice a Python di fare qualcosa con uno o due valori: sommarli, confrontarli, verificare se uno contiene l'altro. Ne conosci già qualcuno dalla matematica di base; Python ne ha qualcuno in più per la logica, l'appartenenza e l'identità.

Vediamo le categorie principali una alla volta.

Operatori aritmetici

Gli operatori matematici standard, più un paio di specialità di Python:

Due elementi di questo elenco si dimenticano facilmente:

  • / restituisce un float anche quando entrambi i lati sono interi. 10 / 2 ti dà 5.0. Per la divisione intera, usa //.
  • % è il modulo. n % 2 == 0 è il modo più pulito per verificare se n è pari.

Python segue la precedenza standard della matematica: ** ha precedenza su * e /, che a loro volta hanno precedenza su + e -. Le parentesi scavalcano tutto:

Usa le parentesi senza risparmio quando hai anche solo un dubbio. Non costano nulla e rendono evidente l'intenzione.

Operatori di confronto

Sei confronti, ognuno dei quali restituisce un booleano:

Python ti permette di concatenare i confronti, cosa insolita e utile:

Si legge "age è almeno 18 e minore di 65". Dietro le quinte equivale a 18 <= age and age < 65, ma si legge più come in matematica.

Operatori logici

Si scrivono come parole inglesi, non con simboli:

Due dettagli da conoscere:

Valutazione in cortocircuito. and si ferma al primo valore falsy; or si ferma al primo valore truthy. Il lato destro non viene nemmeno valutato se il lato sinistro decide già la risposta. Questo ti permette di proteggerti dagli errori in modo sicuro:

and/or restituiscono il valore, non sempre True/False. Restituiscono l'operando che ha deciso il risultato:

Nel codice reale vedrai name = user_input or "anonymous": è uno schema per i valori predefiniti basato proprio su questo comportamento.

Per le regole complete su questi tre operatori, compresi quali valori contano come falsy, come si ordinano tra loro not, and e or e perché and non è la stessa cosa di &, leggi and, or, not in Python.

Operatori di assegnazione

= assegna. Le forme composte uniscono un'operazione all'assegnazione:

Le forme composte funzionano anche con le stringhe (s += "more") e con le liste (lst += [4, 5]). Non sono più veloci della forma estesa; sono solo più corte.

Appartenenza: in e not in

Verificano se un valore compare all'interno di un contenitore:

in funziona su qualsiasi iterabile: liste, tuple, set, stringhe, dict e altro ancora. Per le ricerche su grandi quantità di dati, in su una lista è O(n); in su un set o un dict è O(1). Fa la differenza quando controlli l'appartenenza molte volte.

Identità: is e is not

is verifica se due variabili puntano allo stesso oggetto in memoria, non solo a valori uguali:

Quasi sempre ti serve ==. L'unico caso in cui is dà davvero il meglio è il confronto con None, True e False:

La convenzione della comunità è netta: is None, non == None. Lo stesso vale per is True (anche se raramente ti serve).

Operatori bit a bit (saltali alla prima lettura)

Python ha anche operatori bit a bit (&, |, ^, ~, <<, >>) per manipolare i singoli bit di un intero. Sono utili in crittografia, nella programmazione di rete a basso livello e in certi algoritmi. Alla prima lettura puoi tranquillamente ignorarli.

L'operatore walrus (:=)

Python 3.8 ha aggiunto :=, che assegna e restituisce un valore in una sola espressione. È utile nelle condizioni in cui vuoi sia catturare sia verificare un risultato:

Senza il walrus, chiameresti len(numbers) due volte oppure aggiungeresti una riga in più. Non è indispensabile; usalo dove riduce le ripetizioni.

Promemoria sulla precedenza degli operatori

Dalla precedenza più alta alla più bassa, per gli operatori che userai davvero:

  1. **: elevamento a potenza
  2. *, /, //, %: moltiplicazione e divisione
  3. +, -: addizione e sottrazione
  4. <, <=, >, >=, ==, !=: confronti
  5. not
  6. and
  7. or

Nel dubbio, metti le parentesi. La chiarezza batte l'astuzia.

Domande frequenti

Quali sono i principali tipi di operatori in Python?

Aritmetici (+, -, *, /, //, %, **), di confronto (==, !=, <, <=, >, >=), logici (and, or, not), di assegnazione (=, +=, -=, …), di appartenenza (in, not in) e di identità (is, is not).

Che differenza c'è tra == e is in Python?

== verifica se due valori sono uguali. is verifica se due variabili fanno riferimento esattamente allo stesso oggetto in memoria. Per None, True e False usa is: sono singleton. Per tutto il resto, == è quasi sempre quello che vuoi.

Cosa fa l'operatore % in Python?

Con i numeri, % è l'operatore modulo: restituisce il resto di una divisione. 17 % 5 fa 2. Con le stringhe è una vecchia sintassi di formattazione (come "hello %s" % name), ma le f-string l'hanno in gran parte sostituita.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA