Почему операторы с двумя плюсами не выбрасывают ошибку (например, 1 + + 2)
Почему следующая команда python оценивает значение 3
?
1 + + 2
Я бы ожидал, что он выкинет ошибку как плохое использование операторов. И это не ограничивается двумя операторами, вышесказанное может быть расширено:
1 + + - - + + - + + - 2
... по-прежнему оценивает значение 3
. Что может быть причиной конструктора языка для разрешения этого очень странного вида синтаксиса.
Ответы
Ответ 1
потому что вы добавляете 1
с помощью +2
(используя унарный оператор +
)
>>> +2
2
и
>>> --2
2
для вашего сложного примера:
1 + + - - + + - + + - 2
разрешается как 1 +
(+--++-++-2)
, второй член, который можно упростить как 2
, потому что число минус-знаков четное
Ответ 2
согласно python.org, унарные + и унарные - операторы имеют больший приоритет перед сложениями и вычитаниями. В python
+number
- это действительное выражение, которое просто возвращает число. Поскольку он имеет более высокий приоритет, он оценивается до сложения или вычитания.
1 + + - - + + - + + - 2
эквивалентно
(1) + ( +( -( -( +( +( -( +( +( -2)))))))))
Итак, какова точка унарного + оператора? Ну, на этот вопрос ответил этот вопрос.
Ответ 3
Помните, что +3
- это число, а -3
- число. Что происходит,
1 + + 2
становится
1 + (+2)
и
1 - + - 2
становится
1 - (+ (-2))