Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In which order is an if statement evaluated in Python

Tags:

python

If you have an if statement where several variables or functions are evaluated, in which order are they evaluated?

if foo > 5 or bar > 6:     print 'foobar' 

In this specific case, will foo be evaluated against the five and then bar against the 6 (left to right) or will it be evaluated right to left? I am assuming that a or and and is evaluated in the same order.

like image 800
Mogget Avatar asked Apr 24 '13 20:04

Mogget


People also ask

Does the order of if statements matter in Python?

Yes, the order of the conditions matters. In your code, you test if(a==b) first. If all 3 integers are the same, then this will be true and only return c; will execute. It won't even bother with the rest of the conditions.

Are IF statements evaluated left to right Python?

In Python, the left operand is always evaluated before the right operand. That also applies to function arguments. Python uses short circuiting when evaluating expressions involving the and or or operators.


2 Answers

The left clause will be evaluated first, and then the right one only if the first one is False.

This is why you can do stuff like:

if not person or person.name == 'Bob':     print "You have to select a person and it can't be Bob" 

Without it breaking.

Conversely, with an and clause, the right clause will only be evaluated if the first one is True:

if person and person.name:    # ... 

Otherwise an exception would be thrown when person is None.

like image 95
ubik Avatar answered Oct 03 '22 11:10

ubik


It will be evaluated left to right.

>>> def a(): ...     print 'a' ...     return False ...  >>> def b(): ...     print 'b' ...     return False ...  >>> print a() or b() a b False >>> def c(): ...     print 'c' ...     return True ...  >>> print c() or a() c True 
like image 42
Nathan Villaescusa Avatar answered Oct 03 '22 10:10

Nathan Villaescusa