一些结果(一百万次调用的时间,以秒为单位),以及在 Windows 7 上使用 Python 2.7.10 的十元素列表;store
是我们存储长度还是继续调用len
, and alias
是我们是否创建本地别名len
:
Store Alias n= 1 10 100
Yes Yes 0.862 1.379 6.669
Yes No 0.792 1.337 6.543
No Yes 0.914 1.924 11.616
No No 0.879 1.987 12.617
和一个千元素列表:
Store Alias n= 1 10 100
Yes Yes 0.877 1.369 6.661
Yes No 0.785 1.299 6.808
No Yes 0.926 1.886 11.720
No No 0.891 1.948 12.843
结论:
- 存储结果比调用更高效
len
反复地,甚至为了n == 1
;
- 创建本地别名
len
可以为更大的改进做一个小改进n
我们不存储结果,但不像只存储结果那样多;和
- 列表长度的影响可以忽略不计,这表明整数是否被保留没有任何区别。
测试脚本:
def test(n, l, store, alias):
if alias:
len_ = len
len_l = len_(l)
else:
len_l = len(l)
for _ in range(n):
if store:
_ = len_l
elif alias:
_ = len_(l)
else:
_ = len(l)
if __name__ == '__main__':
from itertools import product
from timeit import timeit
setup = 'from __main__ import test, l'
for n, l, store, alias in product(
(1, 10, 100),
([None]*10,),
(True, False),
(True, False),
):
test_case = 'test({!r}, l, {!r}, {!r})'.format(n, store, alias)
print test_case, len(l),
print timeit(test_case, setup=setup)