Rushy Panchal
Rushy Panchal

Reputation: 17532

Usage of the "==" operator for three objects

Is there any computational difference between these two methods of checking equality between three objects?

I have two variables: x and y. Say I do this:

>>> x = 5
>>> y = 5
>>> x == y == 5
True

Is that different from:

>>> x = 5
>>> y = 5
>>> x == y and x == 5
True

What about if they are False?

>>> x = 5
>>> y = 5
>>> x == y == 4
False

And:

>>> x = 5
>>> y = 5
>>> x == y and x == 4
False

Is there any difference in how they are calculated?

In addition, how does x == y == z work?

Thanks in advance!

Upvotes: 10

Views: 1755

Answers (2)

abhiarora
abhiarora

Reputation: 10430

Adding a little visual demonstration to already accepted answer.

For testing equality of three values or variables. We can either use:

>>> print(1) == print(2) == print(3)
1
2
3
True

>>> print(1) == print(2) and print(2) == print(3)
1
2
2
3
True

The above statements are equivalent but not equal to, since accesses are only performed once. Python chains relational operators naturally. See this docs:

Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).

If the functions called (and you are comparing return values) have no side-effects, then the two ways are same.

In both examples, the second comparison will not be evaluated if the first one evaluates to false. However: beware of adding parentheses. For example:

>>> 1 == 2 == 0
False
>>> (1 == 2) == 0
True

See this answer.

Upvotes: 0

Ned Batchelder
Ned Batchelder

Reputation: 375484

Python has chained comparisons, so these two forms are equivalent:

x == y == z
x == y and y == z

except that in the first, y is only evaluated once.

This means you can also write:

0 < x < 10
10 >= z >= 2

etc. You can also write confusing things like:

a < b == c is d   # Don't  do this

Beginners sometimes get tripped up on this:

a < 100 is True   # Definitely don't do this!

which will always be false since it is the same as:

a < 100 and 100 is True   # Now we see the violence inherent in the system!

Upvotes: 18

Related Questions