On Friday, April 5, 2002, at 01:06 AM, Guido van Rossum wrote: >> On Thursday, April 4, 2002, at 02:22 PM, Stuart Bishop wrote: >> >>> On a side note, writing 'i or False and True' performs much better I mean (i and True) or (i or False) >>> than bool(i) in the test implementation, and flow control statements >>> involving ints are perform much better than flow control using bool. >>> Will there be a performance degredation in the final version, or >>> can this be avoided? >> >> I fixed my test to not do a global lookup on True and flow control >> is no longer slower. > > Do I take it that you were benchmarking with the Python class shown in > the PEP? No - I was benchmarking with the patch posted on Sourceforge (before PEP285 was checked into CVS), patched into a CVS snapshot taken at the same time. Casting to bool using (x and True) or (x or False) : 1.61 Casting to bool using (bool) : 2.68 Flow control on explicit True : 1.42 Flow control on explicit 1 : 0.99 Flow control on variable bound to True : 1.02 Flow control on variable bound to 1 : 0.99 import time count = 1000000 def test1(): ''' Casting to bool using (x and True) or (x or False) ''' nums = xrange(count) start = time.clock() for i in nums: x = (i and True) or (i or False) end = time.clock() return end - start def test2(): ''' Casting to bool using (bool) ''' nums = xrange(count) start = time.clock() for i in nums: x = bool(i) end = time.clock() return end - start def test3(): ''' Flow control on explicit True ''' nums = xrange(count) start = time.clock() for i in nums: if True: pass else: pass end = time.clock() return end - start def test4(): ''' Flow control on explicit 1 ''' nums = xrange(count) start = time.clock() for i in nums: if 1: pass else: pass end = time.clock() return end - start def test5(a = True): ''' Flow control on variable bound to True ''' nums = xrange(count) start = time.clock() for i in nums: if a: pass else: pass end = time.clock() return end - start def test6(a = 1): ''' Flow control on variable bound to 1 ''' nums = xrange(count) start = time.clock() for i in nums: if a: pass else: pass end = time.clock() return end - start for f in (test1,test2,test3,test4,test5,test6): print f.__doc__,': ',f() -- Stuart Bishop <zen@shangri-la.dropbear.id.au> http://shangri-la.dropbear.id.au/
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4