虽然
bool()并
operator.truth()输出 为主要用途的情况下相同的结果他们的 实现
实际上是相当不同的。
bool()是一个类或类型的构造函数,同时
truth()是一个狭窄的优化正则函数。
实际上,还有两个区别:1)
bool()在不带参数的情况下调用
returns
Falsewhile
truth()需要一个参数。2)
bool()接受
x关键字参数,例如
bool(x=1),而
truth()没有关键字参数。
bool()对于常规用例,这两者都会增加开销。
关键字的实现很奇怪,因为可能没有人需要它,而且名称
x几乎没有描述性。Issue29695涵盖了这一点,实际上,该问题不仅影响到
bool()其他类,例如
int()或
list()。但是,从Python
3.7开始,这些关键字参数将被删除,并且速度应会提高。尽管如此,我还是在最新的Python
3.8分支上测试了时序,并且
bool()比以前更快,但仍比以前快两倍
truth(),这可能是由于的实现更为通用
bool()。
因此,如果您的任务非常重视速度,那么我建议您在需要函数的情况下使用
truth()over
bool()(例如,解析为的键
sorted())。但是,正如khelwood所指出的那样,
bool()有时还是会更快
filter(bool,iterable),所以最好将您的用例确定为最佳选择。
当然,如果您不需要功能,而只想测试值是 真 还是 假 ,则应使用惯用语
if或
ifnot语句,如khelwood和ser2357112所评论的那样,这是最快的。



