[EMAIL PROTECTED] a écrit :
(snip)
> Anyone know why towards arg is True and arg is False, arg is None is
> faster than arg == None ...

Perhaps reading about both the meaning of the 'is' operator might help ? 
  the expression 'arg is True' will only eval to true if 'id(arg) == 
id(True)'. Now Python objects does have a truth value by themselves. So 
an object can eval to false in a boolean test *without* being the False 
object itself.

For the record, True and False are late additions to the language - at 
first, it only had truth values of objects, basically defined as 'empty 
sequences and containers, numeric zeros and None are false, anything 
else is true unless either:
- the class implements the __len__ magic method and len(obj) == 0
- the class implements the magic method __non_zero__ (IIRC) and this 
obj.__non_zero__ returns false.

So the common idiom is to test the truth value of an object, which is 
expressed as "if obj: " - using 'if obj == True:' being redundant and 
'if obj is True:' usually not what you want.

wrt/ None: Since being None is not the same thing as being false (even 
if the first imply the second) - there may be cases where you want to 
distinguish between an object with a false truth value from the None 
object itself - so you can't just use 'if not obj:'. Now since None is 
garanteed to be a singleton, it defines it's __cmp__ (the magic method 
for '==') as an identity test. So directly using the identity test is 
faster since it yields the exact same result as the equality test 
without the overhead of the additional method call.


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to