Почему 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" медленнее, чем константа.