Gregory Ewing <greg.ew...@canterbury.ac.nz>: > a != b != c > > does *not* imply that a != c. At least it doesn't in Python; I've > never seen any mathematicians write that, so I don't know what they > would make of it.
Any resemblance between mathematics notation and Python is purely coincidental. I must admit I had missed Python's chained comparisons until this discussion, but now I looked up the definition: comparison ::= or_expr ( comp_operator or_expr )* comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in" [...] Formally, if a, b, c, ..., y, z are expressions and op1, op2, ..., opN are comparison operators, then a op1 b op2 c ... y opN z is equivalent to a op1 b and b op2 c and ... y opN z, except that each expression is evaluated at most once. That means, in my opinion, that you should feel free to use chaining any way you see fit. Also, the rule is crystal-clear and easy to grasp: there's an implicit "and" there. It's another thing, then, if it was a good idea to include chaining there in the first place, but I trust the idea was properly vetted and double checked against possible parsing ambiguities. Even without chaining "is not" is a bit suspect: >>> False is not 0 True >>> False is (not 0) False >>> False is not not not 0 File "<stdin>", line 1 False is not not not 0 ^ SyntaxError: invalid syntax Marko -- https://mail.python.org/mailman/listinfo/python-list