Perché 1 +++ 2 = 3?
-
19-08-2019 - |
Domanda
In che modo Python valuta l'espressione 1 +++ 2
?
Quanti mai +
ho messo in mezzo, sta stampando 3
come risposta. Qualcuno può spiegare questo comportamento
E per 1--2
sta stampando 3
e per 1 --- 2
sta stampando -1
Soluzione
La tua espressione è uguale a:
1+(+(+2))
Qualsiasi espressione numerica può essere preceduta da -
per renderlo negativo o +
per non fare nulla (l'opzione è presente per la simmetria). Con segni negativi:
1-(-(2)) = 1-(-2)
= 1+2
= 3
e
1-(-(-2)) = 1-(2)
= -1
Vedo che hai chiarito la tua domanda per dire che provieni da uno sfondo C. In Python non ci sono operatori di incremento come ++
e -
in C, che probabilmente era la fonte della tua confusione. Per incrementare o decrementare una variabile i
o j
in Python usa questo stile:
i += 1
j -= 1
Altri suggerimenti
I + in più non sono incrementatori (come ++ a o a ++ in c ++). Stanno solo dimostrando che il numero è positivo.
Non esiste un tale operatore ++. C'è un operatore unario + e un operatore unario - però. L'operatore unario + non ha alcun effetto sul suo argomento. L'operatore unario annulla il proprio operatore o lo elabora di -1.
+1
- > 1
++1
- > 1
È uguale a + (+ (1))
1+++2
- > 3 Perché è uguale a 1 + (+ (+ (2))
Allo stesso modo puoi fare --1 per significare - (-1) che è +1.
--1
- > 1
Per completezza non esiste * unario opeartor. Quindi * 1 è un errore. Ma c'è un ** operatore che è il potere di, prende 2 argomenti.
2**3
- > 8
1 + (+ (+ 2)) = 3
1 - (-2) = 3
1 - (- (- 2)) = -1
Prova Unary Plus e Unary meno meno :
L'operatore unario - (meno) produce la negazione del suo argomento numerico.
L'operatore unario + (più) restituisce invariato l'argomento numerico.
>>> +2
2
>>> ++2
2
>>> +++2
2
>>> -2
-2
>>> --2
2
>>> ---2
-2
>>> 1+(++2)
3
Credo che sia analizzato come, il primo + come operazione binaria (aggiungi), e il resto come operazioni unarie (rendere positivo).
1 + (+(+2))
Pensalo come 1 + (+1 * (+ 1 * 2))). Il primo + è operatore e i seguenti segni più sono segno del secondo operando (= 2).
Proprio come 1 --- 2 è uguale a 1 - - (- (2)) o 1- (-1 * (- 1 * (2))