# 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')