Während ich versuchte, ein komplexeres Problem anzugehen, kam ich, um die Zugriffsgeschwindigkeit auf lokale Variable vs Member-Variablen zu vergleichen.Warum ist lokaler Variablenzugriff in Python schneller als der Zugriff auf Klassenmitglieder?
Hier ein Testprogramm:
#!/usr/bin/env python
MAX=40000000
class StressTestMember(object):
def __init__(self):
self.m = 0
def do_work(self):
self.m += 1
self.m *= 2
class StressTestLocal(object):
def __init__(self):
pass
def do_work(self):
m = 0
m += 1
m *= 2
# LOCAL access test
for i in range(MAX):
StressTestLocal().do_work()
# MEMBER access test
for i in range(MAX):
StressTestMember().do_work()
weiß, dass ich es wie eine schlechte Idee aussehen könnte StressTestMember
und StressTestLocal
auf jeder Iteration zu instanziiert, aber es macht Sinn, in dem modellierten Programm, wo diese sind grundsätzlich aktive Datensätze.
Nach einer einfachen Benchmark
- LOCAL Zugriffstest: 0m22.836
- MEMBER Zugriffstest: 0m32.648s
Die lokale Version ~ 33% schneller ist, während immer noch ein Teil von eine Klasse. Warum?
+1 Sehr gut, klare Antwort. – Tadeck
sehr nett. Das verdient das Akzeptieren. –
Also folgt daraus, dass es ratsam wäre, einen neuen Verweis auf eine Klassenvariable im lokalen Bereich zu erstellen? z. B. "m = selbst.m'? Es würde in diesem Test keinen Unterschied machen, aber meine Version von 'do_work()' ist eine Schleife, die millionenfach läuft. –