Почему я ++++++++ я действителен в 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
Ответы
Ответ 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
являются, таким образом, действительными утверждениями.