Mentre cercavo di affrontare un problema più complesso, sono arrivato a confrontare la velocità di accesso con variabili locali vs variabili membro.Perché l'accesso alle variabili locali è più veloce dell'accesso ai membri della classe in Python?
Ecco un programma di test:
#!/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()
So che potrebbe sembrare una cattiva idea per istanziare StressTestMember
e StressTestLocal
su ogni iterazioni, ma ha senso nel programma modellato in cui questi sono fondamentalmente record attivi.
Dopo un semplice punto di riferimento,
- LOCALE test di accesso: 0m22.836
- test di accesso MEMBRO: 0m32.648s
La versione locale è ~ 33% più veloce mentre ancora parte della una classe. Perché?
+1 Molto buono, risposta chiara. – Tadeck
molto bello. questo merita l'accettazione. –
Quindi, sarebbe saggio creare un nuovo riferimento a una variabile di classe in ambito locale? ad esempio, 'm = self.m'? Non farebbe alcuna differenza in questo test, ma la mia versione di 'do_work()' è un ciclo che gira milioni di volte. –