Prateek <[EMAIL PROTECTED]> writes: > >>> b = {0:'xyz', False:'abc'} > >>> b > {0: 'abc'} # Am I the only one who thinks this is weird?
You're not the only one; I consider this a wart in Python. False and True should be discrete values that don't compare equal with any other value, not even ones that evaluate to boolean False or True. >>> False == [] False >>> False == {} False >>> False == '' False >>> False == 0 True This is an artifact of the fact that ‘bool’ is a subclass of ‘int’, and that ‘False’ is implemented such that it has the same hash as ‘0’: >>> isinstance(False, int) True >>> hash(False) == hash(0) True The above is a legacy of the original lack of a boolean type in Python, but it's confusing and IMO unnecessary these days. It should be enough that they all evaluate to False in a boolean context: >>> bool([]) False >>> bool({}) False >>> bool('') False >>> bool(0) False PEP 285 <URL:http://www.python.org/dev/peps/pep-0285>, that introduced the ‘bool’ type, addresses this issue: In an ideal world, bool might be better implemented as a separate integer type that knows how to perform mixed-mode arithmetic. However, inheriting bool from int eases the implementation enormously (in part since all C code that calls PyInt_Check() will continue to work -- this returns true for subclasses of int). Also, I believe this is right in terms of substitutability: code that requires an int can be fed a bool and it will behave the same as 0 or 1. Code that requires a bool may not work when it is given an int; for example, 3 & 4 is 0, but both 3 and 4 are true when considered as truth values. I wonder if any of that is relevant any more. What does backward-compatibility-is-less-important Python 3 do (I don't have it installed)? Is there a later PEP that I've missed which finally makes ‘bool’ a type independent from ‘int’? -- \ “A ‘No’ uttered from deepest conviction is better and greater | `\ than a ‘Yes’ merely uttered to please, or what is worse, to | _o__) avoid trouble.” —Mahatma Gandhi | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list