5.6 Operazioni aritmetiche binarie

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:

m_expr  ::=  u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr
    | m_expr "%" u_expr
a_expr  ::=  m_expr | a_expr "+" m_expr | a_expr "-" m_expr
Potete scaricare il file originale (in Inglese) come testo.

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

Deprecato dalla versione 2.3 di Python. L'operatore di divisione con arrotondamento, l'operatore modulo e la funzione divmod() non vengono più definite per numeri complessi. È appropriato invece, convertire i numeri complessi in numeri in virgola mobile usando la funzione abs().

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.



Footnotes

... operando5.1
Mentre 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.
... 15.2
Se 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.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.