【发布时间】:2018-08-07 04:05:45
【问题描述】:
bool() 和 operator.truth() 都测试一个值是 truthy 还是 falsy 并且它们在文档中看起来非常相似,它甚至在 truth()文档:
这相当于使用 bool 构造函数。
但是,通过简单的测试,truth() 的速度是bool() 的两倍多(显示的是 Python 3.6 时序,但 2.7 类似):
from timeit import timeit
print(timeit('bool(1)', number=10000000))
# 2.180289956042543
print(timeit('truth(1)', setup='from operator import truth', number=10000000))
# 0.7202018899843097
那么有什么区别呢?我应该使用truth() 而不是bool()?
这个问答是在与ShadowRangerthis question 下的广泛 cmet 和讨论之后产生的。
【问题讨论】:
-
timeit('b(1)', 'b=bool')明显比timeit('bool(1)')快(尽管仍然比truth慢得多)。查找全局名称bool会影响结果。 -
@khelwood 谢谢,好点,但时差仍然超过两倍,是吗?
-
是的,
truth仍然肯定比bool快得多(顺便说一下,比True if ... else False慢)。 -
@khelwood 是的,我猜
if语句是高度优化的;truth的用例是您可以解析像key=bool这样的关键字参数的地方
标签: python python-3.x python-2.7 performance boolean