Почему 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
Попытка унарного плюса и унарного минуса
Унарный оператор - (минус) дает отрицание своего числового аргумента.
Унарный оператор + (плюс) возвращает числовой аргумент без изменений.
>>> +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