几个结果(一百万次呼叫的时间,以秒为单位),并在Windows 7上使用Python
2.7.10列出了十个元素;
store是存储长度还是继续调用
len,
alias是否为
len以下项创建本地别名:
Store Alias n= 1 10 100Yes Yes 0.862 1.379 6.669Yes No 0.792 1.337 6.543No Yes 0.914 1.924 11.616No No 0.879 1.987 12.617
和一千个元素的列表:
Store Alias n= 1 10 100Yes Yes 0.877 1.369 6.661Yes No 0.785 1.299 6.808No Yes 0.926 1.886 11.720No No 0.891 1.948 12.843
结论:
- 存储结果比
len
重复调用(甚至是)更有效n == 1
。 - 为不创建结果的本地别名
len
可以对较大的n
地方进行较小的改进,因为我们不存储结果,但不如仅存储结果那样多。和 - 列表长度的影响可以忽略不计,这表明是否对整数进行了intern没有任何区别。
测试脚本:
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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)