Skip to content

Instantly share code, notes, and snippets.

@pylemon
Created April 13, 2012 01:54
Show Gist options
  • Save pylemon/2372868 to your computer and use it in GitHub Desktop.
Save pylemon/2372868 to your computer and use it in GitHub Desktop.
python: map with lambda is slow
>>> import timeit
>>>
>>> data = 'data=xrange(1000000)'
>>>
>>> # be careful when using lambda with map
>>> timeit.timeit('map(lambda x:x*2, data)', data, number=20)
3.8384609954834
>>>
>>> # using list comprehension will be faster
>>> timeit.timeit('[i*2 for i in data]', data, number=20)
1.7002441883087158
>>>
>>> # using builtin function will be fast
>>> timeit.timeit('map(2 .__mul__, data)', data, number=20)
1.7502341270446777
# tests in pypy
>>> import timeit
>>> data = range(10000000)
>>> timeit.timeit('[i*2 for i in data]', 'from __main__ import data', number=20)
23.240397930145264
>>> timeit.timeit('[i*2 for i in data]', 'from __main__ import data', number=20)
21.457597970962524
>>> timeit.timeit('map(lambda i: i*2, data)', 'from __main__ import data', number=20)
22.283735036849976
>>> timeit.timeit('map(lambda i: i*2, data)', 'from __main__ import data', number=20)
24.484759092330933
>>> timeit.timeit('result=[]\nappend=result.append\nfor i in data:\n\tappend(i*2)', 'from __main__ import data', number=20)
19.520271062850952
>>> timeit.timeit('result=[]\nappend=result.append\nfor i in data:\n\tappend(i*2)', 'from __main__ import data', number=20)
19.50778102874756
@wowsoso
Copy link

wowsoso commented Apr 13, 2012

推导式会快一些.
但map, filter, reduce 一般情况下不是影响效率的因素,千万别排斥~~

@pylemon
Copy link
Author

pylemon commented Apr 13, 2012

恩 在邮件列表中看到讨论 pylint 将 map filter 作为不推荐函数 标记出来.
性能瓶颈一般确实不在这. 不到万不得已没必要为了这么点性能牺牲掉 readablity, 只是从这里可以看出来 python 中的函数调用 代价还是挺高的.
人家用 pypy 做了个测试 发现最快的竟然是 for 循环 比 list comprehension 都快.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment