Welcome, guest | Sign In | My Account | Store | Cart
# 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')

History