Al tratar de abordar un problema más complejo, comencé a comparar la velocidad de acceso con las variables locales frente a las variables miembro.¿Por qué el acceso variable local es más rápido que el acceso de miembro de clase en Python?
Aquí un programa de prueba:
#!/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()
Sé que puede parecer una mala idea para crear una instancia StressTestMember
y StressTestLocal
en cada uno de iteraciones pero tiene sentido en el programa de modelado, donde estos son básicamente Active Records.
Después de un simple punto de referencia,
- LOCAL prueba de acceso: 0m22.836 prueba de acceso MIEMBRO
- : 0m32.648s
La versión local es de ~ 33% más rápido, mientras que sigue siendo parte de una clase. ¿Por qué?
+1 Muy bien, una respuesta clara. – Tadeck
muy agradable. esto merece la aceptación. –
Entonces, ¿sería sabio crear una nueva referencia a una variable de clase en el ámbito local? por ejemplo, 'm = self.m'? No haría ninguna diferencia en esta prueba, pero mi versión de 'do_work()' es un ciclo que se ejecuta millones de veces. –