当比较几种进行二进制测试的方法时,我定时(使用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几乎没有变化)让我认为它不是这样的
简而言之,为什么我会得到这些结果?它们对我来说似乎非常不合逻辑,而且这两个异常可能是相关的 - 这就是我在一个问题中提出这个问题的原因。