### Question :

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?

##
Answer #1:

The `**`

operator follows normal mathematical conventions; it is right-associative:

In the usual computer science jargon, exponentiation in mathematics is right-associative, which means that x

^{yz}should be read as x^{(yz)}, not (x^{y})^{z}. In expositions of the BODMAS rules that are careful enough to address this question, the rule is to evaluate the top exponent first.

and from Wikipedia on the *Order of Operations*:

If exponentiation is indicated by stacked symbols, the usual rule is to work from the top down, because exponention is right-associative in mathematics.

So `2 ** 3 ** 4`

is calculated as `2 ** (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.

##
Answer #2:

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).

```
>>> 2 ** 2 ** 2
16
>>> 2 ** 2 ** 2 ** 2
65536
>>> (2 ** 2 ** 2) ** 2
256
```

For the middle case `2 ** 2 ** 2 ** 2`

, this are the intermediate steps –

- broken down to
`2 ** (2 ** (2 ** 2))`

`2 ** (2 ** (4)) # progressing right to left`

`2 ** (16) # this is 2 to the power 16`

which finally evals to`65536`

Hope that helps!

##
Answer #3:

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 then `4 ** 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.