Skip to main content
 首页 » 编程设计

python之优化对对象列表的所有元素调用方法

2025年05月04日54leader

我有一个对象列表,我想遍历列表并为每个对象调用一个方法。显然,这是过度优化,更像是“哦,我想知道什么是最快的方法”,而不是“必须让每个周期都具有速度”。我可以想出几种方法来做到这一点,并对它们进行一些分析,得到以下结果:

; ipython 
Python 2.7.5 (default, Jun 17 2014, 18:11:42)  
Type "copyright", "credits" or "license" for more information. 
 
IPython 2.3.0 -- An enhanced Interactive Python. 
?         -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help      -> Python's own help system. 
object?   -> Details about 'object', use 'object??' for extra details. 
 
 In [1]  class ook: 
             def eek(self): 
                 pass 
              
 
 In [2]  lst = [ook(), ook(), ook(), ook(), ook(), ook(), ook(), ook()] 
 
 In [3]  %timeit -n 10000 map(lambda x: x.eek(), lst) 
10000 loops, best of 3: 2.17 µs per loop 
 
 In [4]  %timeit -n 10000 [x.eek() for x in lst] 
10000 loops, best of 3: 2.32 µs per loop 
 
 In [5]  def test(lst): 
             for x in lst: 
                 x.eek() 
                  
 
 In [6]  %timeit -n 10000 test(lst) 
10000 loops, best of 3: 2.18 µs per loop 

标准循环方法似乎在可读性方面胜出,但 map 解决方案看起来更快一些。

我错过了什么吗?

有没有更好的办法?

请您参考如下方法:

如果您只想调用列表中的所有函数,for 循环应该是最有效的,因为它不会创建新列表(实际上它在我的机器上是最有效的)。

另请注意,在 Python 3 中,map 解决方案将不起作用,因为它会创建稍后计算的生成器。