[Python-Dev] PEP 285: Adding a bool type (original) (raw)

Stuart Bishop zen@shangri-la.dropbear.id.au
Fri, 5 Apr 2002 11:46:13 +1000


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/