lambda func会被“缓存”或被记住吗

2024-10-02 00:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在写一些类似于上面的代码,如果我把lambda def放在同一行,它会不会更慢?或者我应该赋给一个变量f,以避免在每次迭代中都进化lambda def,或者python实际上足够聪明地缓存它?在


Tags: lambda代码maplendefalotofdata
1条回答
网友
1楼 · 发布于 2024-10-02 00:28:16

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  

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

^{pr2}$

或者定义一个更具可读性的完整函数:

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

[my_func(x) for x in aLotOfData]

Which is more preferable to use in Python: lambda functions or nested functions ('def')?

相关问题 更多 >

    热门问题