0

map( lambda x: len(x), aLotOfData)

我正在编写一些类似于上面的代码,如果我将 lambda def 放在同一行中,它实际上会更慢吗?或者我应该分配给一个变量 f 以避免在每次迭代中演变 lambda def 或者 python 实际上足够聪明来缓存它?

4

1 回答 1

1

仅评估lambda一次(转换为代码对象),因此无需将其分配给变量。

>>> import dis
>>> def func():
...    map( lambda x: len(x), aLotOfData) 
...    
>>> dis.dis(func)
  2           0 LOAD_GLOBAL              0 (map)
              3 LOAD_CONST               1 (<code object <lambda> at 0x31c3d30, file "<ipython-input-30-27b0b12b0965>", line 2>)
              6 MAKE_FUNCTION            0
              9 LOAD_GLOBAL              1 (aLotOfData)
             12 CALL_FUNCTION            2
             15 POP_TOP             
             16 LOAD_CONST               0 (None)
             19 RETURN_VALUE  

但是由于maplambda 的速度很慢,所以应该在这里使用列表理解或生成器表达式(如果你想要一个迭代器)。

[len(x) for x in aLotOfData]

或者定义一个更易读的完整函数:

def my_func(x):
   #do something with x
   return something

[my_func(x) for x in aLotOfData]

在 Python 中使用哪个更可取:lambda 函数或嵌套函数('def')?

于 2013-05-15T07:24:40.657 回答