Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

Operators and their bindings: exponentiation

Repeat the experiment, but now with exponentiation. 

Use this snippet of code:

print(2 ** 2 ** 3)

The two possible results are: 

  • 2**2 ->4; 4**3->64
  • 2**3->8; 2***->256

run the code. What do you see? 

The result clearly shows that the exponentiation operator uses right-sided binding. 

List of priorities

Since you're new to Python operators, we don't want to present the complete list of operator priorities right now. 

Instead, we'll show you a truncated form, and we'll expand it consistently as we introduce new operators. 

Look at the table below: 

Priority      Operator 

  1.        **
  2.        +, - (note: unary operators located next to the right of the power operator bind more strongly)   unary
  3.        *, / , // , %
  4.        +, -                                                                                                                                                                      binary

Note: we've enumerated the operators in order from highest (1) to the lowest (4) priorities. 

Try to work through the following expression: 

print(2 * 3 % 5)

Both operators (* and %) have the same priority, so the result can be guessed only when you know the binding direction. What do you think? What is the result? 

1

Operators and parentheses

Of course, you're always allowed to use parentheses, which can change the natural order of calculation. 

In accordance with the arithmetic rules, subexpressions in parentheses are always calculated first. 

You can use as many parentheses as you need, and they're often used to improve the readability of an expression, even if they don't change the order of the operations. 

An example of an expression with multiple parentheses is here:

print((5 * ((25 % 13) + 100) / (2 * 13)) // 2)

Try to compute the value that's printed to the console. What's the result of the print() function 

10.0