速度字典映射vs if elif

时间:2015-12-06 11:37:12

标签: python

我有一个实现为lambdaif 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

1 个答案:

答案 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