Welcome, guest | Sign In | My Account | Store | Cart
# Show relative speeds of local, nonlocal, global, and built-in access.

trials = [1] * 500

def read_local(trials=trials):
    v_local = 1
    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 = 1
    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 = 1
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):
    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

class A:
    def m(self):
        pass

def read_classvar(trials=trials, A=A):
    A.x = 1
    for t in trials:
        A.x;    A.x;    A.x;    A.x;    A.x
        A.x;    A.x;    A.x;    A.x;    A.x
        A.x;    A.x;    A.x;    A.x;    A.x
        A.x;    A.x;    A.x;    A.x;    A.x
        A.x;    A.x;    A.x;    A.x;    A.x

def read_instancevar(trials=trials, a=A()):
    a.x = 1
    for t in trials:
        a.x;    a.x;    a.x;    a.x;    a.x
        a.x;    a.x;    a.x;    a.x;    a.x
        a.x;    a.x;    a.x;    a.x;    a.x
        a.x;    a.x;    a.x;    a.x;    a.x
        a.x;    a.x;    a.x;    a.x;    a.x

def read_boundmethod(trials=trials, a=A()):
    for t in trials:
        a.m;    a.m;    a.m;    a.m;    a.m
        a.m;    a.m;    a.m;    a.m;    a.m
        a.m;    a.m;    a.m;    a.m;    a.m
        a.m;    a.m;    a.m;    a.m;    a.m
        a.m;    a.m;    a.m;    a.m;    a.m

def write_local(trials=trials):
    v_local = 1
    for t in trials:
        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1

def make_nonlocal_writer():
    v_nonlocal = 1
    def inner(trials=trials):
        nonlocal v_nonlocal
        for t in trials:
            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
    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 = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1

def write_classvar(trials=trials, A=A):
    for t in trials:
        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1

def write_instancevar(trials=trials, a=A()):
    for t in trials:
        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1

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,
              read_classvar, read_instancevar, read_boundmethod,
              write_local, write_nonlocal, write_global,
              write_classvar, write_instancevar,
              loop_overhead]:
        print('{:5.3f}\t{}'.format(min(Timer(f).repeat(7, 1000)), f.__name__))

Diff to Previous Revision

--- revision 3 2011-08-10 04:07:55
+++ revision 4 2011-08-10 18:38:10
@@ -1,9 +1,9 @@
 # Show relative speeds of local, nonlocal, global, and built-in access.
 
-trials = [None] * 500
+trials = [1] * 500
 
 def read_local(trials=trials):
-    v_local = None
+    v_local = 1
     for t in trials:
         v_local;    v_local;    v_local;    v_local;    v_local
         v_local;    v_local;    v_local;    v_local;    v_local
@@ -12,7 +12,7 @@
         v_local;    v_local;    v_local;    v_local;    v_local
 
 def make_nonlocal_reader():
-    v_nonlocal = None
+    v_nonlocal = 1
     def inner(trials=trials):
         for t in trials:
             v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
@@ -25,7 +25,7 @@
 
 read_nonlocal = make_nonlocal_reader()
 
-v_global = None
+v_global = 1
 def read_global(trials=trials):
     for t in trials:
         v_global; v_global; v_global; v_global; v_global
@@ -47,7 +47,7 @@
         pass
 
 def read_classvar(trials=trials, A=A):
-    A.x = None
+    A.x = 1
     for t in trials:
         A.x;    A.x;    A.x;    A.x;    A.x
         A.x;    A.x;    A.x;    A.x;    A.x
@@ -56,7 +56,7 @@
         A.x;    A.x;    A.x;    A.x;    A.x
 
 def read_instancevar(trials=trials, a=A()):
-    a.x = None
+    a.x = 1
     for t in trials:
         a.x;    a.x;    a.x;    a.x;    a.x
         a.x;    a.x;    a.x;    a.x;    a.x
@@ -73,24 +73,24 @@
         a.m;    a.m;    a.m;    a.m;    a.m
 
 def write_local(trials=trials):
-    v_local = None
+    v_local = 1
     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
+        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
+        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
+        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
+        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
+        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
 
 def make_nonlocal_writer():
-    v_nonlocal = None
+    v_nonlocal = 1
     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
+            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
+            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
+            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
+            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
+            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
     inner.__name__ = 'write_nonlocal'
     return inner
 
@@ -99,27 +99,27 @@
 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
+        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
+        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
+        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
+        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
+        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
 
 def write_classvar(trials=trials, A=A):
     for t in trials:
-        A.x = None;    A.x = None;    A.x = None;    A.x = None;    A.x = None
-        A.x = None;    A.x = None;    A.x = None;    A.x = None;    A.x = None
-        A.x = None;    A.x = None;    A.x = None;    A.x = None;    A.x = None
-        A.x = None;    A.x = None;    A.x = None;    A.x = None;    A.x = None
-        A.x = None;    A.x = None;    A.x = None;    A.x = None;    A.x = None
+        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
+        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
+        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
+        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
+        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
 
 def write_instancevar(trials=trials, a=A()):
     for t in trials:
-        a.x = None;    a.x = None;    a.x = None;    a.x = None;    a.x = None
-        a.x = None;    a.x = None;    a.x = None;    a.x = None;    a.x = None
-        a.x = None;    a.x = None;    a.x = None;    a.x = None;    a.x = None
-        a.x = None;    a.x = None;    a.x = None;    a.x = None;    a.x = None
-        a.x = None;    a.x = None;    a.x = None;    a.x = None;    a.x = None
+        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
+        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
+        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
+        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
+        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
 
 def loop_overhead(trials=trials):
     for t in trials:

History