Python allows expressions on their own without their being part of a statement (assignment or otherwise).
If it didn't, then any in-place function or method call would require an assignment as well:
listobject.sort() # this is nothing more than an expression
would have to be written as:
ignored = listobject.sort() # assign None to ignored
Python cannot know that your expression has no effect on the rest of the code; radius
could refer to an object with an .__rmul__
method, which would be called when Python executes your 2 * radius
expression.
So, in the end, Python calculates 2 * 10
for you, discards the outcome, and moves on.