使用简单for
比list comprehesion
。几乎快了 2 倍。检查以下结果:
Using list comprehension
: 58 usec
moin@moin-pc:~$ python -m timeit "[i for i in range(1000)]"
10000 loops, best of 3: 58 usec per loop
Using for
loop: 37.1 微秒
moin@moin-pc:~$ python -m timeit "for i in range(1000): i"
10000 loops, best of 3: 37.1 usec per loop
但就你而言,for
比列表理解花费更多时间并不是因为您的 for 循环很慢。但因为.append()
您在代码中使用。
With append()
in for
loop`: 114 usec
moin@moin-pc:~$ python -m timeit "my_list = []" "for i in range(1000): my_list.append(i)"
10000 loops, best of 3: 114 usec per loop
这清楚地表明它是.append()
这花费了两倍的时间for
loop.
然而,关于storing the "list.append" in different variable
: 69.3 微秒
moin@moin-pc:~$ python -m timeit "my_list = []; append = my_list.append" "for i in range(1000): append(i)"
10000 loops, best of 3: 69.3 usec per loop
上面的比较中,与最后一种情况相比,性能有了很大的提高,结果与list comprehension
。这意味着,而不是调用my_list.append()
每次,可以通过将函数的引用存储在另一个变量中来提高性能,即append_func = my_list.append
并使用该变量进行调用append_func(i)
.
这也证明了,与直接使用类的对象进行函数调用相比,调用存储在变量中的类的函数更快.
谢谢Stefan https://stackoverflow.com/users/1672429/stefan-pochmann引起注意的最后一个案件。