I am reading an Intro to Python textbook and came across this line:
Operators on the same row have equal precedence and are applied left to right, except for exponentiation, which is applied right to left.
I understand most of this, but I do not understand why they say exponentiation is applied right to left. They do not provide any examples either. Also, am I allowed to ask general questions like this, or are only problem solving questions preferred?
This explanation seems quite clear to me. Let me show you an example that might enlighten this :
print 2 ** 2 ** 3 # prints 256
If you would read this from left to right, you would first do
2 ** 2
, which would result in 4, and then4 ** 3
, which would give us 64. It seems we have a wrong answer. :)However, from right to left... You would first do
2 ** 3
, which would be 8, and then,2 ** 8
, giving us 256 !I hope I was able to enlighten this point for you. :)
EDIT : Martijn Pieters answered more accurately to your question, sorry. I forgot to say it was mathematical conventions.
The
**
operator follows normal mathematical conventions; it is right-associative:and from Wikipedia on the Order of Operations:
So
2 ** 3 ** 4
is calculated as2 ** (3 ** 4)
(== 2417851639229258349412352) not(2 ** 3) ** 4
(== 4096).This is pretty universal across programming languages; it is called right-associativity, although there are exceptions, with Excel and MATLAB being the most notable.
from http://docs.python.org/reference/expressions.html
Operators in the same box group left to right (except for comparisons, including tests, which all have the same precedence and chain from left to right — see section Comparisons — and exponentiation, which groups from right to left).
For the middle case
2 ** 2 ** 2 ** 2
, this are the intermediate steps -2 ** (2 ** (2 ** 2))
2 ** (2 ** (4)) # progressing right to left
2 ** (16) # this is 2 to the power 16
which finally evals to65536
Hope that helps!