我有一个实现为lambda
和if elif ...
的函数,并比较了执行时间:
light = lambda c, v: {'turn on': 1,
'turn off': 0,
'toggle': (v+1)%2}[c]
def l(c, v):
if c == 'turn on':
return 1
elif c == 'turn off':
return 0
elif c == 'toggle':
return (v+1)%2
return v
t = Timer(lambda: light('turn on', 0))
print('light: ' + str(t.timeit(number=23163958)))
t = Timer(lambda: l('turn on', 0))
print('l: ' + str(t.timeit(number=23163958)))
输出结果为:
light: 8.976719211001182
l: 3.9458757909887936
为什么if
声明几乎快两倍?是否有可能进一步提高性能?我必须执行这项功能超过2300万次。
根据这个我认为dict查找会更快:https://stackoverflow.com/a/15925086/2014080
答案 0 :(得分:1)
问题是每次调用lambda你再次实例化字典,这需要时间。如果仅引用字典而不是字典,则它比条件语更快地运行。
一些简化的代码来证明这一点。
from timeit import Timer
d = {'turn on': 1, 'turn off': 0}
light = lambda c : d[c]
t = Timer(lambda: light('turn on'))
print('light: ' + str(t.timeit(number=23163958)))
# light: 3.66314601898