changeset 494:60683361ebed

Test-script for checking the costs of different variable lookup methods Variant from https://stackoverflow.com/questions/2714573/instance-variables-vs-class-variables-in-python
author Franz Glasner <f.glasner@feldmann-mg.com>
date Fri, 17 Dec 2021 19:24:54 +0100
parents 6a0f761ff35b
children 3f0c932588fc
files tests/_perf_lookups.py
diffstat 1 files changed, 33 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/_perf_lookups.py	Fri Dec 17 19:24:54 2021 +0100
@@ -0,0 +1,33 @@
+from __future__ import print_function
+import timeit
+
+setup='''
+XGLOBAL= 5
+class A:
+    xclass = 5
+    def __init__(self):
+        self.xinstance = 5
+    def f1(self):
+        xlocal = 5
+        x = self.xinstance
+    def f2(self):
+        xlocal = 5
+        x = A.xclass
+    def f3(self):
+        xlocal = 5
+        x = XGLOBAL
+    def f4(self):
+        xlocal = 5
+        x = xlocal
+    def f5(self):
+        xlocal = 5
+        x = self.xclass
+a = A()
+'''
+num = 300000000
+num = 90000000
+print('access via instance variable: %.3f' % timeit.timeit('a.f1()', setup=setup, number=num) )
+print('access via class variable (via classname): %.3f' % timeit.timeit('a.f2()', setup=setup, number=num) )
+print('access via class variable (via self): %.3f' % timeit.timeit('a.f5()', setup=setup, number=num) )
+print('access via module variable: %.3f' % timeit.timeit('a.f3()', setup=setup, number=num) )
+print('access via local variable: %.3f' % timeit.timeit('a.f4()', setup=setup, number=num) )