【发布时间】:2013-08-10 01:03:49
【问题描述】:
为什么在 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
我对这些事情感到困惑:
- 根据Sylvain Defresne 先生在this question 中的回复,所有内容都先隐式转换为
bool,然后再进行检查。那么为什么if True比if 1慢? - 为什么
test3比test1慢,即使只有return值不同? - 类似于问题 2,但为什么
test4比test2稍微快?
注意:我跑了 3 次 timeit 并取了结果的平均值,然后将时间和代码一起贴在这里。
这个问题与如何进行微基准测试无关(我在这个例子中做了,但我也明白它太基础了),但为什么检查“真”变量比常数慢。
【问题讨论】:
-
我认为你的测试太小了。而且平均三轮是不够的:p
-
我明白 :) 即使是测试用例也太基础了,无法思考。但是,我们需要从正确的地方开始 :)
-
@JarrodRoberson 感谢您的链接:-) 但是,我的问题与通用微型基准测试无关。这是关于为什么使用关键字检查布尔值比检查常量慢。
-
True 的输入时间是数字 1 的 4 倍
标签: python performance if-statement boolean timeit