在尝试解决更复杂的问题时,我开始比较对局部变量和成员变量的访问速度。
这里有一个测试程序:
#!/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 Record 的建模程序中它是有意义的。
经过一个简单的基准测试,
- 本地访问测试:0m22.836
- MEMBER访问测试:0m32.648s
本地版本的速度提高了约 33%,同时仍然是课程的一部分。为什么?