[Python-Dev] Patch to use dict subclasses in eval(), exec

Jeff Epler jepler@unpythonic.net
2002年10月29日 11:18:29 -0600


Here's the lookup-speed script.
num = 1000000
code = """
x = None
r = range(%d)
def builtin_lookup():
 for i in r:
 len; len; len; len
 len; len; len; len
 len; len; len; len
 len; len; len; len
def global_lookup():
 for i in r:
 x; x; x; x
 x; x; x; x
 x; x; x; x
 x; x; x; x
def local_lookup():
 x = None
 for i in r:
 x; x; x; x
 x; x; x; x
 x; x; x; x
 x; x; x; x
def overhead():
 for i in r: pass
""" % num
class D(dict): pass
class E(dict): __getitem__ = lambda s, k: dict.__getitem__(s, k)
print "Timing %d name lookups" % (num*4)
print "%8s %8s %8s %8s %8s" % ("type", "builtin", "global", "local", "overhead")
import time
for dc in dict, D, E:
 d = dc()
 exec code in d
 print "%8s" % dc.__name__,
 for f in ("builtin_lookup()", "global_lookup()", "local_lookup()", "overhead()"):
 t0 = time.time()
 exec f in d
 t1 = time.time()
 print "%8.5f" % (t1-t0),
 print

AltStyle によって変換されたページ (->オリジナル) /