Почему 2- — — -1 =3?

#python

#python

Вопрос:

Недавно я столкнулся с ошибкой при использовании python (v3.6.8) и pandas (v0.23.4), где я пытался вычесть смещение даты. Однако я случайно ввел два -- знака, и в итоге вместо этого добавилось смещение даты. Я еще немного поэкспериментировал и обнаружил, что 2--1 вернет 3 . Это имеет смысл, поскольку вы могли бы интерпретировать это как 2-(-1) , но вы можете пойти еще дальше и объединить кучу отрицаний вместе 2----1 , чтобы вернуть 3. Я также воспроизвел это в R, и это делает то же самое. Кто-нибудь может помочь мне понять, что здесь происходит?

Комментарии:

1. Это также имеет смысл, поскольку вы могли бы интерпретировать это как 2-(-(-(-1)))

2. Это не ошибка, это особенность. То же самое 4 — — — — 4 == 8.It называется math.

3. Должно ли это быть функцией? Поддержка трудночитаемого синтаксиса?

4. По той же причине, что --1=1

5. В этом случае я бы предпочел, чтобы он выдавал ошибку, поскольку ее было довольно сложно отловить.

Ответ №1:

2 — — — — 1 это то же самое, что 2 — ( — ( — ( — 1))) что такое то же самое, что

2 — ( — (1)) = 2 1 = 3

Как только количество минусов становится четным, вы на самом деле делаете » «.

Ответ №2:

Поскольку оно каждый раз отрицается, четное количество знаков — будет эквивалентно одному знаку , а нечетное число эквивалентно знаку -. итак

 2---1
  

Вычислит значение 1 и

 2----1
  

будет вычислено до 3

Ответ №3:

математически это правильно. почему язык программирования допускает это? может быть, мне просто не хватает воображения, но я не могу придумать ни одной причины, по которой вы хотели бы явно связать вместе знаки плюс или минус. и если вы сделали это, то, скорее всего, это опечатка, как в исходном сообщении. если это делается с помощью переменных, то это определенно должно быть разрешено (т. Е. a = -1; 2 -a должно быть 3). некоторые языки позволяют i увеличивать i . а python позволяет i = 1 увеличивать i. отсутствие синтаксической ошибки просто кажется мне запутанным, даже если это математически правильно.

Ответ №4:

Как говорят некоторые учителя математики, «бум-бум!»

То, что вы на самом деле делаете, это добавление 2 1.

В математике, когда у вас есть два символа вычитания рядом друг с другом, они объединяются, образуя символ сложения. По крайней мере, это то, чему меня учили в школе.

Так что на самом деле, это больше похоже на это,

 2     1
  

О котором все знают 2 1 = 3

(и добро пожаловать в Stack Overflow!)