Двоичный выбор: удивительные результаты при выполнении временных тестов

Сравнивая несколько способов выполнения бинарных тестов, я рассчитал (используя модуль 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. Это означает, что в схеме "если, элиф", или, вернее, здесь, проверяемый элиф стоит больше времени, чем проверяемый. Но чтобы проверить elif, так что, "еще если", программа должна сначала проверить, если? Таким образом, нет способа, которым проверка elif могла бы стоить меньше времени, чем проверка? Тем не менее, это так.

  • t1 меняется со временем. Это всегда то же самое, и это колеблется от 0,019 до 0,037, что огромно! Я бы подумал, что мой компьютер будет просто позволять большей или меньшей мощности быть питоном в зависимости от времени, но некоторые тесты, проводимые в одно и то же время (и t2 едва меняются), позволяют мне думать, что это не так.

Короче говоря, почему я получаю эти результаты? Они кажутся мне очень нелогичными, и эти 2 аномалии, вероятно, связаны - вот почему я задаю их в одном вопросе.

0 ответов

Другие вопросы по тегам