二元选择:执行时序测试时的结果令人惊讶

时间:2014-12-08 23:34:21

标签: python testing time binary

当比较几种进行二进制测试的方法时,我定时(使用timeit模块)进行二进制测试的常用方法,使用if / elif(否则,为了比较相等的原因,即使它通常也是如此)其他人):

if condition:
    a+=3
elif not condition:
    a+=1

因此,我尝试了这个:

t1=timeit.timeit("""
if 1:
    a=1
elif 0:
    a=2
""",number=1000000)

t2=timeit.timeit("""
if 0:
    a=1
elif 1:
    a=2
""",number=1000000)

print t1,t2

这些是结果:

%run "c:\users\julien\appdata\local\temp\tmpjhuf2w.py"
0.022503887147 0.0205487676589

%run "c:\users\julien\appdata\local\temp\tmpec5gw5.py"
0.0304157066397 0.0194413797704

%run "c:\users\julien\appdata\local\temp\tmppvd2xw.py"
0.0367008256659 0.0190168297643

%run "c:\users\julien\appdata\local\temp\tmpzr8dep.py"
0.0366070894035 0.0186504372933

%run "c:\users\julien\appdata\local\temp\tmpiiv0gg.py"
0.0338743694611 0.0184653594905

%run "c:\users\julien\appdata\local\temp\tmpqqpxyo.py"
0.0188361993025 0.018510517106

%run "c:\users\julien\appdata\local\temp\tmp8czuqx.py"
0.0299052887436 0.0207660031576

%run "c:\users\julien\appdata\local\temp\tmp2haja4.py"
0.0364606692564 0.0211987636392

%run "c:\users\julien\appdata\local\temp\tmpvqoant.py"
0.0286668753496 0.0185029908368

%run "c:\users\julien\appdata\local\temp\tmps2ao5w.py"
0.0330574271449 0.0184735699661

这些结果中的两点对我来说似乎不合逻辑:

  • t1始终大于t2。 这意味着,在" if,elif"模式,或者更确切地说,在这里,被验证的elif比验证时花费更多的时间。但要检查elif,那么,"否则如果",程序必须检查if if first?因此,验证elif无法比验证时花费更少的时间?但它确实如此。

  • t1随时间而变化。它总是一样的,它变化0.019到0.037,这是巨大的!我会认为我的计算机会随着时间的推移允许或多或少的功能变成python,但是同时进行的一些测试(并且t2几乎没有变化)让我认为它不是这样的

简而言之,为什么我会得到这些结果?它们对我来说似乎非常不合逻辑,而且这两个异常可能是相关的 - 这就是我在一个问题中提出这个问题的原因。

0 个答案:

没有答案