bool()
和 operator.truth()
都用于测试值是否为真或假,从文档上看它们似乎非常相似,在 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()
吗?
这个问答是在与ShadowRanger在这个问题下进行广泛评论和讨论后产生的。
timeit('b(1)', 'b=bool')
比timeit('bool(1)')
明显更快(尽管仍然比truth
慢得多)。查找全局名称bool
会影响结果。 - khelwoodtruth
仍然比bool
快得多(顺便说一句,它比True if ... else False
慢)。 - khelwoodif
语句是高度优化的;truth
的用例是当您解析关键字参数时,例如key=bool
。 - Chris_Rands