In which order is an if statement evaluated in 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.
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
.
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