尝试解决一个更复杂的问题时,我比较了访问本地变量和成员变量的速度。
这是一个测试程序:
#!/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()
我知道在每次迭代中实例化StressTestMember
和StressTestLocal
可能看起来不是一个好主意,但在模拟的程序中,这其实是有意义的,因为它们基本上是 Active Records。经过简单的基准测试:
- 本地访问测试: 0m22.836
- 成员访问测试: 0m32.648s
m = self.m
?这在这个测试中不会有任何区别,但我的do_work()
版本是一个运行数百万次的循环。 - James Sself.m
几次,我会期望将其提取到本地变量中会更快。记得在修改它时将本地变量保存回属性。 - John La Rooy