Почему if True
медленнее, чем if 1
в Python? Не должно if True
быть быстрее, чем if 1
?
Я пытался изучить модуль timeit
. Начиная с основ, я пробовал:
>>> def test1():
... if True:
... return 1
... else:
... return 0
>>> print timeit("test1()", setup = "from __main__ import test1")
0.193144083023
>>> def test2():
... if 1:
... return 1
... else:
... return 0
>>> print timeit("test2()", setup = "from __main__ import test2")
0.162086009979
>>> def test3():
... if True:
... return True
... else:
... return False
>>> print timeit("test3()", setup = "from __main__ import test3")
0.214574098587
>>> def test4():
... if 1:
... return True
... else:
... return False
>>> print timeit("test4()", setup = "from __main__ import test4")
0.160849094391
Я смущен этими вещами:
- В соответствии с ответом г-на Сильвана Defresne в этот вопрос, все сначала неявно преобразуется в
bool
, а затем проверяется. Итак, почемуif True
медленнее, чемif 1
? - Почему
test3
медленнее, чемtest1
, хотя разные значенияreturn
отличаются? - Как и вопрос 2, но почему
test4
немного быстрее, чемtest2
?
ПРИМЕЧАНИЕ. Я провел timeit
три раза и взял среднее значение результатов, а затем разместил здесь время вместе с кодом.
Этот вопрос не связан с тем, как делать микро-бенчмаркинг (который я сделал в этом примере, но я также понимаю, что он слишком простой), но почему проверка переменной "True" медленнее, чем константа.