Почему операторы с двумя плюсами не выбрасывают ошибку (например, 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))