[英]Speed dict mapping vs if elif
我有一个实现为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万次。
据此,我认为字典查找会更快: https : //stackoverflow.com/a/15925086/2014080
问题在于您对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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.