# Show relative speeds of local, nonlocal, global, and built-in access.
trials = [None] * 500
def read_local(trials=trials):
v_local = None
for t in trials:
v_local; v_local; v_local; v_local; v_local
v_local; v_local; v_local; v_local; v_local
v_local; v_local; v_local; v_local; v_local
v_local; v_local; v_local; v_local; v_local
v_local; v_local; v_local; v_local; v_local
def make_nonlocal_reader():
v_nonlocal = None
def inner(trials=trials):
for t in trials:
v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
inner.__name__ = 'read_nonlocal'
return inner
read_nonlocal = make_nonlocal_reader()
v_global = None
def read_global(trials=trials):
for t in trials:
v_global; v_global; v_global; v_global; v_global
v_global; v_global; v_global; v_global; v_global
v_global; v_global; v_global; v_global; v_global
v_global; v_global; v_global; v_global; v_global
v_global; v_global; v_global; v_global; v_global
def read_builtin(trials=trials):
v_local = None
for t in trials:
oct; oct; oct; oct; oct
oct; oct; oct; oct; oct
oct; oct; oct; oct; oct
oct; oct; oct; oct; oct
oct; oct; oct; oct; oct
def write_local(trials=trials):
v_local = None
for t in trials:
v_local = None; v_local = None; v_local = None; v_local = None; v_local = None
v_local = None; v_local = None; v_local = None; v_local = None; v_local = None
v_local = None; v_local = None; v_local = None; v_local = None; v_local = None
v_local = None; v_local = None; v_local = None; v_local = None; v_local = None
v_local = None; v_local = None; v_local = None; v_local = None; v_local = None
def make_nonlocal_writer():
v_nonlocal = None
def inner(trials=trials):
nonlocal v_nonlocal
for t in trials:
v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None
v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None
v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None
v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None
v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None; v_nonlocal = None
inner.__name__ = 'write_nonlocal'
return inner
write_nonlocal = make_nonlocal_writer()
def write_global(trials=trials):
global v_global
for t in trials:
v_global = None; v_global = None; v_global = None; v_global = None; v_global = None
v_global = None; v_global = None; v_global = None; v_global = None; v_global = None
v_global = None; v_global = None; v_global = None; v_global = None; v_global = None
v_global = None; v_global = None; v_global = None; v_global = None; v_global = None
v_global = None; v_global = None; v_global = None; v_global = None; v_global = None
def loop_overhead(trials=trials):
for t in trials:
pass
if __name__=='__main__':
from timeit import Timer
for f in [read_local, read_nonlocal, read_global, read_builtin,
write_local, write_nonlocal, write_global, loop_overhead]:
print(min(Timer(f).repeat(7, 1000)), f.__name__, sep='\t')