为什么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
我对这些事情感到困惑:
- 根据 Sylvain Defresne 先生在这个问题中的回答,一切都被隐式转换为
bool
第一个然后检查。那么为什么if True
比 慢if 1
? - 为什么
test3
比test1
只有return
值不同时慢? - 像问题 2,但为什么比快
test4
一点?test2
注意:我跑了timeit
3 次,取了结果的平均值,然后把时间和代码一起贴在这里。
这个问题与如何进行微基准测试无关(我在这个例子中做了,但我也明白它太基础了),但为什么检查“真”变量比常数慢。