为什么Python中if True
比if 1
慢?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
我对以下事情感到困惑:
- 根据Mr.Sylvain Defresne在这个问题中的回答,所有的值都会被隐式转换为
bool
类型并且再进行检查。那么为什么if True
比if 1
慢? - 即使只有
return
语句不同,为什么test3
比test1
慢? - 像问题2一样,但为什么
test4
比test2
稍微快一点?
注意:我运行了timeit
三次并取得平均结果,然后将时间和代码发布在此处。
这个问题与如何进行微基准测试无关(尽管我在这个示例中进行了基本的测试),而是关于为什么检查'True'变量比常量慢的原因。