bool()和operator.truth()之间有什么区别?

发布于 2021-01-29 18:58:23

bool()operator.truth()两个测试值是否
truthyfalsy ,他们似乎从文档颇为相似,它甚至说,在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()吗?

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    虽然bool()operator.truth() 输出 为主要用途的情况下相同的结果他们的 实现
    实际上是相当不同的。bool()是一个类或类型的构造函数,同时truth()是一个狭窄的优化正则函数。

    实际上,还有两个区别:1)bool()在不带参数的情况下调用returns
    Falsewhiletruth()需要一个参数。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),所以最好将您的用例确定为最佳选择。

    当然,如果您不需要功能,而只想测试值是 还是 ,则应使用惯用语ifif not语句,如khelwood和ser2357112所评论的那样,这是最快的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看