semantics of ** (unexpected/inconsistent?)

Alf P. Steinbach alfps at start.no
Sun Nov 29 20:23:32 EST 2009


* Esmail:
> Ok, this is somewhat unexpected:
> 
> Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
> [GCC 4.3.3] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> 
> 
>  >>> -3**2
> -9
> 
>  >>> x = -3
> 
>  >>> x**2
> 9
>  >>>
> 
> I would have expected the same result in both cases.
> 
> Initially I would have expected -3**2 to yield 9, but I can accept
> that ** binds tighter than the unary -, but shouldn't the results
> be consistent regardless if I use a literal or a variable?

It is.

 >>> -3**2
-9
 >>> x = 3
 >>> -x**2
-9
 >>>

:-)


I guess you expect your expression "x**2" to somehow be evaluated as "-3**2". 
But x doesn't contain text, it contains an integer value that presumably (I 
don't know) is represented in the binary number system, so it's evaluated as 
"(-3)**2". If x contained text and was evaluated as such, pure text replacement, 
then you should be able to write 2 x and have that evaluated as "2 -x"...


Cheers & hth.,

- Alf



More information about the Python-list mailing list