Bjoern Schliessmann a écrit : > Bruno Desthuilliers wrote: > >>Shawn Milo a écrit : > > >>> if recs.has_key(piid) is False: >> >>'is' is the identity operator - practically, in CPython, it >>compares memory addresses. You *dont* want to use it here. > > > It's recommended to use "is None"; why not "is False"? Are there > multiple False instances or is False generated somehow?
Once upon a time, Python didn't have a "proper" boolean type. It only had rules for boolean evaluation of a given object. According to these rules - that of course still apply -, empty strings, lists, tuples or dicts, numeric zeros and None are false in a boolean context. IOW, an expression can eval to false without actually being the False object itself. So the result of using the identity operator to test against such an expression, while being clearly defined, may not be exactly what you'd think. To make a long story short: if not []: print "the empty list evals to false in a boolean context" if [] is False: print "this python interpreter is broken" HTH -- http://mail.python.org/mailman/listinfo/python-list