2009-01-22 6 views
21

Comment Python évalue-t-il l'expression 1 +++ 2?Pourquoi 1 +++ 2 = 3?

Combien de '+' je mets entre les deux, il imprime 3 comme réponse. S'il vous plaît quelqu'un peut-il expliquer ce comportement

Et pour 1--2 impression est 3 et 1 --- 2 il imprime -1

+0

Cela signifie-t il n'y a pas d'opérateurs incrément en python? – udpsunil

+2

Pour incrémenter une variable i dans python: i + = 1 –

+4

-1: La question fait un grand nombre d'hypothèses sur ++ et -; choses auxquelles on répond directement à http://www.python.org/doc/2.5.2/ref/expressions.html –

Répondre

51

Votre expression est le même que:

1+(+(+2)) 

Toute expression numérique peut être précédée de - pour la rendre négative, ou + pour ne rien faire (l'option est présente pour la symétrie). Avec des signes négatifs:

1-(-(2)) = 1-(-2) 
     = 1+2 
     = 3 

et

1-(-(-2)) = 1-(2) 
      = -1 

Je vois que vous éclairci votre question pour dire que vous venez d'un arrière-plan C. En Python, il n'y a pas d'opérateurs d'incrémentation comme ++ et -- en C, ce qui était probablement la source de votre confusion. Pour augmenter ou diminuer une variable ou ij dans le python utiliser ce style:

i += 1 
j -= 1 
+3

Btw: C'était une décision de conception des créateurs de Python. Il devrait interdire exactement l'écriture d'un tel code indéterminé comme i +++ j. – Boldewyn

4

1 + (+ (+ 2)) = 3

1 - (-2) = 3

1 - (- (- 2)) = -1

13

Les extra + ne sont pas des incrémenteurs (comme ++ a ou ++ en C++). Ils montrent juste que le nombre est positif.

Il n'existe pas d'opérateur ++ de ce type. Il existe cependant un opérateur unaire + et un opérateur unaire. L'opérateur unary + n'a aucun effet sur son argument. L'opérateur unaire annule son opérateur ou le multiplie par -1.

+1 

-> 1

++1 

-> 1

Ceci est la même chose que + (+ (1))

1+++2 

-> 3 Parce qu'il est le Identique à 1 + (+ (+ (2))

De même, vous pouvez faire --1 pour dire - (-1) qui est +1.

--1 

-> 1

Pour être complet, il n'y a pas * unaire opeartor. Donc * 1 est une erreur. Mais il y a un opérateur ** qui est la puissance de, il prend 2 arguments.

2**3 

-> 8

1

Pensez comme 1 + (1 * (+ 1 * 2))). Le premier + est l'opérateur et les signes plus suivants sont le signe du deuxième opérande (= 2).

Tout comme 1 --- 2 est identique à 1 - - (- (2)) ou 1- (-1 * (- 1 * (2))

1

Je crois qu'il est en cours d'analyse comme le premier + comme une opération binaire (ajouter), et le reste que les opérations unaires (faire positif)

1 + (+(+2)) 
3

Essayer Unary Plus and Unary minus.

le unaire - opérateur (moins) donne la négation de son numérique argument

L'opérateur unary + (plus) renvoie son argument numérique inchangé.

>>> +2 
2 
>>> ++2 
2 
>>> +++2 
2 
>>> -2 
-2 
>>> --2 
2 
>>> ---2 
-2 
>>> 1+(++2) 
3 
+0

mais j'obtiens le résultat 3 pour 1 +++++++++++++ 2 aussi – udpsunil

+0

+1: Référence dans la langue de référence –

+0

Pas de transpiration: 1 + (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ (+ 2)))))))))))) Les 12 + sont unaires - voir la réponse de Greg Hewgill. – gimel

Questions connexes