Steven D'Aprano wrote: > On Fri, 23 Jan 2009 14:58:34 -0500, Gerald Britton wrote: > >> Hi -- Some time ago I ran across a comment recommending using <var> is >> None instead of <var> == None (also <var> is not None, etc.) > > That entirely depends on whether you wish to test for something which > *is* None or something with *equals* None. Those two things have > different meanings. > No they don't, because the language *guarantees* the None object is a singleton, so anything that *equals* None *is* None.
> I wonder, do newbies actually get the impression from somewhere that "is" > is a synonym for "=="? > Who knows. But if they do they can easily be reeducated. > > >> My own >> testing indicates that the former beats the latter by about 30% on >> average. Not a log for a single instruction but it can add up in large >> projects. > > If you have a "large" project where the time taken to do comparisons to > None is a significant portion of the total time, I'd be very surprised. > > var is None is a micro-optimization, but that's not why we do it. We do > it because usually the correct test is whether var *is* None and not > merely equal to None. Any random object might happen to equal None > (admittedly most objects don't), but only None is None. > Of course there can be pathological objects with bizarre comparison methods. And the "is" test helps avoid them. regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list