我进行了一些有关列表操作速度的实验。为此,我定义了两个列表:l_short = []
和 l_long = list(range(10**7))
。
我的想法是比较 bool(l)
和 len(l) != 0
的性能差异。
在一个包含if
的测试中,使用以下实现比if len(l) != 0: pass
要快得多: if l: pass
但是如果不含有if
测试,我得到以下结果:
%%timeit
len(l_long) != 0
# 59.8 ns ± 0.358 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%%timeit
bool(l_long)
# 63.3 ns ± 0.192 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
为什么使用 bool
的时间略长?
以下是使用 dis
模块显示的字节码(供参考)
dis("len(l_long) != 0")
"""
1 0 LOAD_NAME 0 (len)
2 LOAD_NAME 1 (l_long)
4 CALL_FUNCTION 1
6 LOAD_CONST 0 (0)
8 COMPARE_OP 3 (!=)
10 RETURN_VALUE
"""
dis("bool(l_long)")
"""
1 0 LOAD_NAME 0 (bool)
2 LOAD_NAME 1 (l_long)
4 CALL_FUNCTION 1
6 RETURN_VALUE
"""