Почему 1 +++ 2 = 3? - PullRequest
       150

Почему 1 +++ 2 = 3?

28 голосов
/ 22 января 2009

Как Python оценивает выражение 1+++2?

Сколько когда-либо + Я положил между ними, он печатает 3 в качестве ответа. Пожалуйста, кто-нибудь может объяснить это поведение

А для 1--2 это печать 3 и для 1---2 это печать -1

Ответы [ 6 ]

59 голосов
/ 22 января 2009

Ваше выражение совпадает с:

1+(+(+2))

Любому числовому выражению может предшествовать -, чтобы сделать его отрицательным, или +, чтобы ничего не делать (опция присутствует для симметрии). С отрицательными признаками:

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

и

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

Я вижу, вы прояснили свой вопрос, чтобы сказать, что вы пришли из Си. В Python в C нет таких операторов приращения, как ++ и --, что, вероятно, и привело вас в замешательство. Чтобы увеличить или уменьшить переменную i или j в Python, используйте этот стиль:

i += 1
j -= 1
14 голосов
/ 22 января 2009

Дополнительные + не являются инкрементами (как ++ a или a ++ в c ++). Они просто показывают, что число положительное.

Нет такого оператора ++. Хотя есть унарный оператор + и унарный оператор. Унарный оператор + не влияет на его аргумент. Унарный оператор отрицает свой оператор или умножает его на -1.

+1

-> 1

++1

-> 1

Это то же самое, что и + (+ (1))

   1+++2

-> 3 Потому что это то же самое, что 1 + (+ (+ (2))

Точно так же вы можете сделать от -1 до - (-1), что равно + 1.

  --1

-> 1

Для полноты не существует * унарного оператора. Так что * 1 это ошибка. Но есть ** Оператор, который является степенью, он принимает 2 аргумента.

 2**3

-> 8

4 голосов
/ 22 января 2009

Попытка Унарный плюс и Унарный минус :

Унарный оператор - (минус) возвращает отрицание своего числового аргумента.

Унарный оператор + (плюс) возвращает числовой аргумент без изменений.

>>> +2
2
>>> ++2
2
>>> +++2
2
>>> -2
-2
>>> --2
2
>>> ---2
-2
>>> 1+(++2)
3
4 голосов
/ 22 января 2009

1 + (+ (+ 2)) = 3

1 - (-2) = 3

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

1 голос
/ 22 января 2009

Я считаю, что он анализируется как, первый + как бинарная операция (добавить), а остальные как унарные операции (сделать положительным).

 1 + (+(+2))
1 голос
/ 22 января 2009

Думайте как 1 + (+1 * (+ 1 * 2))). Первый знак «+» является оператором, а последующие знаки «плюс» являются знаками второго операнда (= 2).

Точно так же, как 1 --- 2 совпадает с 1 - - (- (2)) или 1- (-1 * (- 1 * (2))

...