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

Is this simplified version of map/lambda in python?

本问题已经有最佳答案,请猛点这里访问。

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

1
f = map(lambda x : x + 32, a)

似乎我可以简化写作:

1
f = [x + 32 for x in a]

我想知道是否有什么不同。


lambda往往是导致函数开销的较慢原因。此外,lambda也会使代码更难阅读。您还可以计时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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

此代码返回:

1
2
7.86781311035e-06
2.14576721191e-06

同样,我也尝试了同样的方法来处理更大的列表,对于lambda表达式,所花费的时间几乎是原来的两倍。

1
2
3
4
5
6
7
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

这是性能上的巨大差异。