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

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

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

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

6 ответов

Решение

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

1+(+(+2))

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

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

а также

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

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

i += 1
j -= 1

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

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

+1

-> 1

++1

-> 1

Это так же, как + (+ (1))

   1+++2

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

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

  --1

-> 1

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

 2**3

-> 8

1 + (+ (+ 2)) = 3

1 - (-2) = 3

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

Попытка унарного плюса и унарного минуса

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

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

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

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

 1 + (+(+2))

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

Так же, как 1---2 - это то же самое, что 1 - -(-(2)) или 1- (-1*(-1*(2))

Это просто. В Python нет операторов пост-инкрементации или пост-декрементации.

Смотрите здесь: http://mail.python.org/pipermail/python-list/2006-January/361771.html

Другие вопросы по тегам