Подтвердить что ты не робот

Почему я ++++++++ я действителен в python?

Я "случайно" наткнулся на этот странный, но действительный синтаксис

i=3
print i+++i #outputs 6
print i+++++i #outputs 6
print i+-+i #outputs 0
print i+--+i #outputs 6 

(для каждого четного символа минус: он выводит 6 else 0, почему?)

Помогает ли это сделать что-нибудь полезное?

Обновление (не ошибетесь. Я люблю питон): Один из принципов Python говорит Должен быть один - и желательно только один - простой способ сделать это. Кажется, есть бесконечные способы сделать я + 1

4b9b3361

Ответ 1

Так как у Python нет операторов ++ или - C-стиля, остается предположить, что вы отрицаете или позиционируете (?) значение слева.

например. что бы вы ожидали i + +5 быть?

i=3
print i + +(+i) #outputs 6
print i + +(+(+(+i))) #outputs 6
print i + -(+i) #outputs 0
print i + -(-(+i)) #outputs 6 

Примечательно, что из Спецификация грамматики Python вы увидите строку:

factor: ('+'|'-'|'~') factor | power

Это означает, что фактором в выражении может быть фактор, которому предшествуют +, - или ~. То есть он рекурсивный, поэтому, если 5 является фактором (который обусловлен тем, что фактор- > мощность- > НОМЕР), то -5 является фактором, а значит --5 и --------5.

Ответ 2

Знаки плюса считаются унарными операторами справа большей переменной i, как в + (- 3) = -3, или + (+ (+ 3))) = 3. Только самый левый знак (плюс или минус) анализируются как двоичные, поэтому я +++ я = я + (+ (+ i)), который переводится в я + я = 3 + 3 = 6 в вашем примере.

Другие выражения следуют одному и тому же принципу.

Ответ 3

Это должно читать

print i + (+ (+i) )

то есть первым знаком является оператор сложения, другие - инфиксные знаки

+i

и (к сожалению)

++i

являются, таким образом, действительными утверждениями.