#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!)