= + Оператор Python синтаксически корректен

Я случайно написал:

total_acc =+ accuracy 

вместо:

 total_acc += accuracy 

Я обыскал сеть и ничего не нашел. Итак, что случилось, почему Python думает, что я имею в виду то, что я набираю?

Компьютеры слишком доверяют нам. 🙂

Это то же самое, как если бы вы делали как total_acc = -accuracy , кроме положительного, а не отрицательного. В основном это то же самое, что и total_acc = accuracy , поскольку добавление + до значения не меняет его.

Это называется унарным оператором, так как существует только один аргумент (ex: +a ) вместо двух (ex: a+b ).

Эта ссылка объясняет это немного больше.

Если вы заинтересованы в обнаружении этого типа ошибок раньше, вы можете сделать это с помощью статического анализа кода . Например, flake8 :

 $ cat test.py total_acc = 0 accuracy = 10 total_acc =+ accuracy $ flake8 test.py test.py:4:12: E225 missing whitespace around operator 

В этом случае он жалуется на дополнительное пространство после + , считая, что вы на самом деле означали total_acc = +accuracy . Это помогло бы вам обнаружить проблему раньше.

FYI, pylint тоже поймает это.

Он думает, что вы делаете total_acc = +accuracy , которая устанавливает total_acc равной accuracy . + перед переменной без другого значения вызывает __pos__ метода __pos__ переменной. Для большинства типов это nop , но есть определенные типы, например Decimal которые реализуют __pos__ .