这是python中map/lambda的简化版本吗?

这是python中map/lambda的简化版本吗?,python,Python,对于带有数组a=[1,2,3,4]的map/lambda表达式: f = map(lambda x : x + 32, a) 似乎我可以简化为: f = [x + 32 for x in a] 我想知道是否有任何区别。lambda由于函数的开销,速度往往较慢。此外,lambda往往使代码更难阅读。您还可以对其计时: #!/usr/bin/env python import time a = [1, 2, 3, 4] t1 = time.time() f = map(lambda x :

对于带有数组
a=[1,2,3,4]
的map/lambda表达式:

f = map(lambda x : x + 32, a)
似乎我可以简化为:

f = [x + 32 for x in a]

我想知道是否有任何区别。

lambda
由于函数的开销,速度往往较慢。此外,lambda往往使代码更难阅读。您还可以对其计时:

#!/usr/bin/env python

import time

a = [1, 2, 3, 4]

t1 = time.time()
f = map(lambda x : x + 32, a)
t2 = time.time()-t1
print t2

t3 = time.time()
g = [x + 32 for x in a]
t4 = time.time()-t3
print t4
此代码返回:

7.86781311035e-06
2.14576721191e-06
此外,我还对较大的列表尝试了同样的方法,对于
lambda
expression,花费的时间几乎是原来的两倍

python -m timeit '[x + 32 for x in range(100000)]'

>> 100 loops, best of 3: 6.67 msec per loop

python -m timeit 'map(lambda x : x + 32, range(100000))'

>> 100 loops, best of 3: 12.5 msec per loop

这是一个巨大的性能差异。

如果最终目标是获得一个具有修正值的列表,那么会有一些速度差(第一种情况是<代码>列表(map(lambda x:x+1,32))/代码> BTW,这与MapReduce无关……KeEnthapabaKaLaAm性能总是一个大问题需要考虑。请看上面的指标,我也喜欢lambdas,但它们往往很慢。@Keerthanaprabakharan什么比列表理解更像python?“可读性很重要”——很多@KeerthanaPrabhakaran但是lambda不把代码分成函数,它使用匿名函数。它慢吗?我的测试显示不是这样[prateek@localhostpythonista]$python-mtimeit-s'a=[1,2,3,4]''map(lambda x:x+2,a)'1000000个循环,每个循环最好3:0.189个usec[prateek@localhostpythonista]$python-mtimeit-s'a=[1,2,3,4]''[x+32代表a中的x]'1000000个循环,最好是每个循环3:0.291usec[prateek@localhost蟒蛇科]@KeerthanaPrabhakaran一个人可以通过简单的规则来缓解自己(以及自己的共同编码者)的生活。不使用
lambda
-受污染的
map
filter
表达式扰乱代码库是其中之一;)