Ron Adam wrote: > Here's something interesting: > > import time > > x = None > t = time.time() > for i in range(1000000): > if x==None: > pass > print 'None:',time.time()-t > > x = 'to-end' > t = time.time() > for i in range(1000000): > if x=='to-end': > pass > print 'String:',time.time()-t > > >>> > None: 0.46799993515 > String: 0.360000133514 > > > Of course the difference this would make on a single call in practically > Nill. > > Anyway, time to call it a night so tomorrow I don't make anymore silly > mistakes on comp.lang.python. :) > > Cheers, > Ron >
Try this: import time def timed(number): nreps = ereps = [None] * number t0 = time.time() x = None for i in ereps: if x == None: pass x = 'to-' + 'end' # make sure equal string, not identical string for i in nreps: if x == None: pass t1 = time.time() for i in ereps: if x == 'to-end': pass x = None for i in nreps: if x == 'to-end': pass t2 = time.time() x = None for i in ereps: if x is None: pass x = 'to-end' # magic unnecessary here. for i in nreps: if x is None: pass return t0, t1, t2, time.time() t0, t1, t2, t3 = timed(1000000) print '== None:', t1 - t0 print '== String:', t2 - t1 print 'is None:', t3 - t2 =========================== == None: 0.578000068665 == String: 0.594000101089 is None: 0.31200003624 Testing for None should be an is-test (not just for speed). In older pythons the == result wasn't necessarily same as is-test. This made sense to me after figuring out NULL in database stuff. is-test will always work for None despite the other half. Not so for bogus objects like: >>> class WildCard(object): def __eq__(self, other): return True >>> (WildCard() is None), (None is WildCard()) (False, False) >>> (WildCard() == None), (None == WildCard()) (True, True) --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list