control structures (was "Re: Sins")

Skip Montanaro skip at mojam.com
Thu Jan 6 14:21:38 EST 2000


    Darrell> Don't know if this if fair. But exceptions are slow when raised.

Agreed in the case of your two-branch case.  If you have a state machine
with a bunch of states, try/except/except/... appears to perform about as
well as if/elif/elif/.../else:

    import string, time

    def func1(size):
	s = string.letters + string.digits
	for i in xrange(size):
	    for l in s:
		try:
		    raise intern(l)
		except "a":
		    pass
		except "b":
		    pass
		except "c":
		    pass
		except "d":
		    pass
		except "e":
		    pass
		except "f":
		    pass
		except "g":
		    pass
		except "h":
		    pass
		except "i":
		    pass
		except "j":
		    pass
		except "k":
		    pass
		except "l":
		    pass
		except "m":
		    pass
		except "n":
		    pass
		except "o":
		    pass
		except "p":
		    pass
		except "q":
		    pass
		except "r":
		    pass
		except "s":
		    pass
		except "t":
		    pass
		except "u":
		    pass
		except "v":
		    pass
		except "w":
		    pass
		except "x":
		    pass
		except "y":
		    pass
		except "z":
		    pass
		except "A":
		    pass
		except "B":
		    pass
		except "C":
		    pass
		except "D":
		    pass
		except "E":
		    pass
		except "F":
		    pass
		except "G":
		    pass
		except "H":
		    pass
		except "I":
		    pass
		except "J":
		    pass
		except "K":
		    pass
		except "L":
		    pass
		except "M":
		    pass
		except "N":
		    pass
		except "O":
		    pass
		except "P":
		    pass
		except "Q":
		    pass
		except "R":
		    pass
		except "S":
		    pass
		except "T":
		    pass
		except "U":
		    pass
		except "V":
		    pass
		except "W":
		    pass
		except "X":
		    pass
		except "Y":
		    pass
		except "Z":
		    pass
		except "0":
		    pass
		except "1":
		    pass
		except "2":
		    pass
		except "3":
		    pass
		except "4":
		    pass
		except "5":
		    pass
		except "6":
		    pass
		except "7":
		    pass
		except "8":
		    pass
		except "9":
		    pass

    def func2(size):
	s = string.letters + string.digits
	for i in xrange(size):
	    for l in s:
		if l == "a":
		    pass
		elif l == "b":
		    pass
		elif l == "c":
		    pass
		elif l == "d":
		    pass
		elif l == "e":
		    pass
		elif l == "f":
		    pass
		elif l == "g":
		    pass
		elif l == "h":
		    pass
		elif l == "i":
		    pass
		elif l == "j":
		    pass
		elif l == "k":
		    pass
		elif l == "l":
		    pass
		elif l == "m":
		    pass
		elif l == "n":
		    pass
		elif l == "o":
		    pass
		elif l == "p":
		    pass
		elif l == "q":
		    pass
		elif l == "r":
		    pass
		elif l == "s":
		    pass
		elif l == "t":
		    pass
		elif l == "u":
		    pass
		elif l == "v":
		    pass
		elif l == "w":
		    pass
		elif l == "x":
		    pass
		elif l == "y":
		    pass
		elif l == "z":
		    pass
		elif l == "A":
		    pass
		elif l == "B":
		    pass
		elif l == "C":
		    pass
		elif l == "D":
		    pass
		elif l == "E":
		    pass
		elif l == "F":
		    pass
		elif l == "G":
		    pass
		elif l == "H":
		    pass
		elif l == "I":
		    pass
		elif l == "J":
		    pass
		elif l == "K":
		    pass
		elif l == "L":
		    pass
		elif l == "M":
		    pass
		elif l == "N":
		    pass
		elif l == "O":
		    pass
		elif l == "P":
		    pass
		elif l == "Q":
		    pass
		elif l == "R":
		    pass
		elif l == "S":
		    pass
		elif l == "T":
		    pass
		elif l == "U":
		    pass
		elif l == "V":
		    pass
		elif l == "W":
		    pass
		elif l == "X":
		    pass
		elif l == "Y":
		    pass
		elif l == "Z":
		    pass
		elif l == "0":
		    pass
		elif l == "1":
		    pass
		elif l == "2":
		    pass
		elif l == "3":
		    pass
		elif l == "4":
		    pass
		elif l == "5":
		    pass
		elif l == "6":
		    pass
		elif l == "7":
		    pass
		elif l == "8":
		    pass
		elif l == "9":
		    pass

    size=1000
    t1=time.time()
    func1(size)
    print 'Time:',time.time()-t1

    t1=time.time()
    func2(size)
    print 'Time:',time.time()-t1

Running the above yields:

Time: 5.52181506157
Time: 4.23444199562

;-)

Skip Montanaro | http://www.mojam.com/
skip at mojam.com | http://www.musi-cal.com/
847-971-7098   | Python: Programming the way Guido indented...








More information about the Python-list mailing list