Why does the expression 0 < 0 == 0 return False in Python?
comparison-operators, python
Solution
Python has special case handling for sequences of relational operators to make range comparisons easy to express. It's much nicer to be able to say `0 < x <= 5` than to say `(0 < x) and (x <= 5)`.
These are called chained comparisons.
With the other cases you talk about, the parentheses force one relational operator to be applied before the other, and so they are no longer chained comparisons. And since `True` and `False` have values as integers you get the answers you do out of the parenthesized versions.
Problem
Looking into Queue.py in Python 2.6, I found this construct that I found a bit strange: ``` def full(self): """Return True if the queue is full, False otherwise (not reliable!).""" self.mutex.acquire() n = 0 < self.maxsize == self._qsize() self.mutex.release() return n ``` If `maxsize` is 0 the queue is never full. My question is how does it work for this case? How `0 < 0 == 0` is considered False? ``` >>> 0 < 0 == 0 False >>> (0) < (0 == 0) True >>> (0 < 0) == 0 True >>> 0 < (0 == 0) True ```