繁体   English   中英

速度字典映射与ifif

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM