When dealing with operators in Python we have to know about the concept of Python operator precedence and associativity as these determine the priorities of the operator otherwise, we’ll see unexpected outputs.

**Operator Precedence: **This is used in an expression with more than one operator with different precedence to determine which operation to perform first.

**Example:** Solve

10 + 20 * 30

10 + 20 * 30is calculated as10 + (20 * 30)and not as(10 + 20) * 30

**Code:**

## Python3

`# Precedence of '+' & '*' ` `expr ` `=` `10` `+` `20` `*` `30` ` ` `print` `(expr) ` |

*chevron_right*

*filter_none*

**Output:**

610

**Example:** Now, let’s see an example on** logical** ‘**or**‘ & **logical **‘**and**‘ operator. ‘**if**‘ block is executed even if the age is 0. Because precedence of logical ‘**or**‘ is greater than the logical ‘**and**‘.

## Python3

`# Precedence of 'or' & 'and' ` `name ` `=` `"Alex"` `age ` `=` `0` ` ` `if` `name ` `=` `=` `"Alex"` `or` `name ` `=` `=` `"John"` `and` `age >` `=` `2` `: ` ` ` `print` `(` `"Hello! Welcome."` `) ` `else` `: ` ` ` `print` `(` `"Good Bye!!"` `)` |

*chevron_right*

*filter_none*

**Output:**

Hello! Welcome.

Hence, To run the ‘**else**‘ block we can use parenthesis**( )** as their precedence is highest among all the operators.

## Python3

`# Precedence of 'or' & 'and' ` `name ` `=` `"Alex"` `age ` `=` `0` ` ` `if` `( name ` `=` `=` `"Alex"` `or` `name ` `=` `=` `"John"` `) ` `and` `age >` `=` `2` `: ` ` ` `print` `(` `"Hello! Welcome."` `) ` `else` `: ` ` ` `print` `(` `"Good Bye!!"` `)` |

*chevron_right*

*filter_none*

**Output:**

Good Bye!!

**Operator Associativity:** If an expression contains two or more operators with the same precedence then Operator Associativity is used to determine. It can either be **L**eft to **R**ight or from **R**ight to **L**eft.

**Example:** ‘*’ and ‘/’ have the same precedence and their associativity is **L**eft** t**o **R**ight, so the expression “100 / 10 * 10” is treated as “(100 / 10) * 10”.

**Code:**

## Python3

`# Left-right associativity ` `# 100 / 10 * 10 is calculated as ` `# (100 / 10) * 10 and not ` `# as 100 / (10 * 10) ` `print` `(` `100` `/` `10` `*` `10` `) ` ` ` `# Left-right associativity ` `# 5 - 2 + 3 is calculated as ` `# (5 - 2) + 3 and not ` `# as 5 - (2 + 3) ` `print` `(` `5` `-` `2` `+` `3` `) ` ` ` `# left-right associativity ` `print` `(` `5` `-` `(` `2` `+` `3` `)) ` ` ` `# right-left associativity ` `# 2 ** 3 ** 2 is calculated as ` `# 2 ** (3 ** 2) and not ` `# as (2 ** 3) ** 2 ` `print` `(` `2` `*` `*` `3` `*` `*` `2` `)` |

*chevron_right*

*filter_none*

**Output:**

100 6 0 512

Operators Precedence and Associativity are two main characteristics of operators that determine the evaluation order of sub-expressions in absence of brackets.

**Example:** Solve

100 + 200 / 10 - 3 * 10

100 + 200 / 10 - 3 * 10 is calculated as 100 + (200 / 10) - (3 * 10) and not as (100 + 200) / (10 - 3) * 10

**Code:**

## Python3

`expression ` `=` `100` `+` `200` `/` `10` `-` `3` `*` `10` `print` `(expression )` |

*chevron_right*

*filter_none*

**Output:**

90.0

Please see the following precedence and associativity table for reference. This table lists all operators from the highest precedence to the lowest precedence.

Operator |
Description |
Associativity |
---|---|---|

( ) | Parentheses | left-to-right |

** | Exponent | right-to-left |

* / % | Multiplication/division/modulus | left-to-right |

+ – | Addition/subtraction | left-to-right |

<< >> | Bitwise shift left, Bitwise shift right | left-to-right |

< <= > >= |
Relational less than/less than or equal to Relational greater than/greater than or equal to |
left-to-right |

== != | Relational is equal to/is not equal to | left-to-right |

is, is not in, not in |
Identity Membership operators |
left-to-right |

& | Bitwise AND | left-to-right |

^ | Bitwise exclusive OR | left-to-right |

| | Bitwise inclusive OR | left-to-right |

not | Logical NOT | right-to-left |

and | Logical AND | left-to-right |

or | Logical OR | left-to-right |

= += -= *= /= %= &= ^= |= <<= >>= |
Assignment Addition/subtraction assignment Multiplication/division assignment Modulus/bitwise AND assignment Bitwise exclusive/inclusive OR assignment Bitwise shift left/right assignment |
right-to-left |

Attention geek! Strengthen your foundations with the **Python Programming Foundation** Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the **Python DS** Course.