Le operazioni aritmetiche binarie hanno il livello di priorità convenzionale. Da notare che alcune di queste operazioni si applicano anche a certi tipi non numerici. A parte l'operatore di potenza, ci sono solo due livelli, uno per gli operatori di moltiplicazione ed uno per gli operatori di addizione:
L'operatore *
(moltiplicazione) restituisce il prodotto dei
suoi argomenti. Gli argomenti devono essere o entrambi numeri o un
argomento deve essere un intero (semplice o long) e l'altro deve
essere una sequenza. Nel primo caso, i numeri vengono convertiti in
un tipo comune e quindi moltiplicati tra loro. Nell'altro caso, viene
eseguita una ripetizione della sequenza; un fattore di ripetizione
negativo produce una sequenza vuota.
Gli operatori /
(divisione) e //
(divisione con
arrotondamento) producono il quoziente dei propri argomenti. Gli
argomenti numerici vengono prima convertiti in un tipo comune.
Divisioni tra numeri interi semplici o long producono un intero dello
stesso tipo; il risultato è quello della divisione matematica con la
funzione `floor' applicata al risultato. Divisioni per zero sollevano
l'eccezione ZeroDivisionError.
L'operatore %
(modulo) produce il resto della divisione tra il
primo argomento ed il secondo. Gli argomenti numerici vengono prima
convertiti in un tipo comune. Se il secondo operando è zero viene
sollevata l'eccezione ZeroDivisionError. Gli argomenti
possono essere numeri in virgola mobile, per esempio 3.14%0.7
è uguale a 0.34
(dato che 3.14
è uguale a
4*0.7 + 0.34
.) L'operatore modulo produce sempre un risultato
con lo stesso segno del secondo operando (o zero); il valore assoluto
del risultato è rigorosamente più piccolo del valore assoluto del secondo operando5.1.
Gli operatori di divisione e modulo per gli interi sono legati dalla
seguente caratteristica: x == (x/y)*y + (x%y)
. La divisione
ed il modulo per gli interi sono legati anche dalla funzione built-in
divmod(): divmod(x, y) == (x/y, x%y)
. Queste
caratteristiche non si applicano ai numeri in virgola mobile;
caratteristiche simili si applicano approssimativamente dove
x/y
viene sostituito da floor(x/y)
o
floor(x/y) - 1
5.2.
L'operatore +
(addizione) produce la somma dei propri
argomenti. Gli argomenti devono essere o entrambi numeri o entrambi
sequenze dello stesso tipo. Nel primo caso, i numeri vengono
convertiti in un tipo comune e quindi sommati tra loro. Nell'altro
caso invece, le sequenze vengono concatenate.
L'operatore -
(sottrazione) produce la differenza tra i propri
argomenti. Gli argomenti numerici vengono prima convertiti in un tipo
comune.
abs(x%y) < abs(y)
è matematicamente vero, per i
numeri in virgola mobile può non essere numericamente vero a causa
dell'arrotondamento. Per esempio, assumendo una piattaforma in
cui i numeri in virgola mobile di Python siano IEEE 754 in
precisione doppia, affinché -1e-100 % 1e100
abbia lo
stesso segno di 1e100
, il risultato computato
-1e-100 + 1e100
che è numericamente esattamente uguale a
1e100
. La funzione fmod() del modulo
math restuisce un risultato il cui segno corrisponde al
segno del primo argomento e perciò, in questo caso, restituisce
-1e-100
. Quale approccio sia il più appropriato, dipende
dall'applicazione.
x
è molto vicino ad un intero esatto multiplo di
y
, è possibile che floor(x/y)
sia più grande di
(x-x%y)/y
a causa dell'arrotondamento. In questo caso,
Python restituisce quest'ultimo risultato per garantire che
divmod(x,y)[0] * y + x % y
sia il più vicino possibile
ad x
.