= + El operador de Python es sintácticamente correcto

Accidentalmente escribí:

total_acc =+ accuracy 

en lugar de:

 total_acc += accuracy 

Busqué en la red y no pude encontrar nada . Entonces, ¿qué pasó? ¿Por qué Python piensa que quiero decir lo que estoy escribiendo?

Las computadoras confían demasiado en nosotros. 🙂

Esto es lo mismo que si fueras a hacer como total_acc = -accuracy , excepto positivo en lugar de negativo. Sin embargo, básicamente es lo mismo que total_acc = accuracy , ya que agregar un + antes de que un valor no lo cambie.

Esto se llama un operador unario ya que solo hay un argumento (ej: +a ) en lugar de dos (ej: a+b ).

Este enlace lo explica un poco más.

Si está interesado en detectar este tipo de errores antes, puede hacerlo con el análisis de código estático . Por ejemplo, flake8 :

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

En este caso, se queja del espacio adicional después del + , pensando que realmente total_acc = +accuracy decir total_acc = +accuracy . Esto te habría ayudado a descubrir el problema antes.

Para tu información, pylint también atraparía eso.

Piensa que estás haciendo total_acc = +accuracy , lo que establece que total_acc igual a la accuracy . + antes de una variable sin otro valor, se __pos__ método __pos__ la variable. Para la mayoría de los tipos, esto es un nop , pero hay ciertos tipos, por ejemplo, Decimal que implementa __pos__ .