I accidentally wrote:
total_acc =+ accuracy
instead of:
total_acc += accuracy
I searched the net and could not find anything. So what happened, why does Python think I mean what I am typing?
Computers trust us too much. :)
I accidentally wrote:
total_acc =+ accuracy
instead of:
total_acc += accuracy
I searched the net and could not find anything. So what happened, why does Python think I mean what I am typing?
Computers trust us too much. :)
This is the same as if you were to do like total_acc = -accuracy
, except positive instead of negative. It basically is the same as total_acc = accuracy
though, as adding a + before a value does not change it.
This is called an unary operator as there is only one argument (ex: +a
) instead of two (ex: a+b
).
This link explains it a little more.
If you are interested in catching this type of errors early, you can do that with static code analysis. For example, flake8
:
$ cat test.py
total_acc = 0
accuracy = 10
total_acc =+ accuracy
$ flake8 test.py
test.py:4:12: E225 missing whitespace around operator
In this case, it is complaining about the extra space after the +
, thinking that you actually meant total_acc = +accuracy
. This would have helped you to discover the problem earlier.
FYI, pylint
would catch that too.
This is the same as if you were to do like total_acc = -accuracy
, except positive instead of negative. It basically is the same as total_acc = accuracy
though, as adding a + before a value does not change it.
This is called an unary operator as there is only one argument (ex: +a
) instead of two (ex: a+b
).
This link explains it a little more.
It thinks you're doing total_acc = +accuracy
, which sets total_acc
equal to accuracy
. +
before a variable without another value causes the variable's __pos__
method to be called. For most types, this is a nop
, but there are certain types, e.g. Decimal
that implement __pos__
.
+
operator? –
Tiertza +
before a value invokes the object's __pos__()
method if it has one. Most types don't have such a method, so it's a no-op. Decimal
is one type that does use it; #16819523 –
Alexina © 2022 - 2024 — McMap. All rights reserved.
total_acc =+ accuracy
istotal_acc = +accuracy
– Apologeticstotal_acc = + accuracy
would work ;) – Thrombocytetotal_sec+=-+-+-+-+-+-+-+-+-+-+-+-accuracy
. – Pailprint ( "something" )
. – Thrombocyte