map( lambda x: len(x), aLotOfData)
我正在编写一些类似于上面的代码,如果我将 lambda def 放在同一行中,它实际上会更慢吗?或者我应该分配给一个变量 f 以避免在每次迭代中演变 lambda def 或者 python 实际上足够聪明来缓存它?
仅评估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 的速度很慢,所以应该在这里使用列表理解或生成器表达式(如果你想要一个迭代器)。
[len(x) for x in aLotOfData]
或者定义一个更易读的完整函数:
def my_func(x):
#do something with x
return something
[my_func(x) for x in aLotOfData]