gpt4 book ai didi

python - bool() 和 operator.truth() 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 17:18:53 27 4
gpt4 key购买 nike

bool()operator.truth()两者都测试一个值是 truthy 还是 falsy 并且它们在文档中看起来非常相似,它甚至在 truth() 文档中说:

This is equivalent to using the bool constructor.

然而,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 进行广泛评论和讨论后产生的在 this question 下.

最佳答案

尽管 bool()operator.truth() 输出 主要用例的相同结果它们的实现 实际上是相当不同的。 bool() 是类或类型构造函数,而 truth() 是窄优化的常规函数​​。

实际上,也有两个区别:1) bool() 调用时没有参数 returns False truth() 需要一个参数。 2) bool() 接受一个 x 关键字参数,比如 bool(x=1),而 truth() 没有关键字参数。对于常规用例,这两者都会增加 bool() 的开销。

关键字实现很奇怪,因为可能没有人需要它并且名称 x 几乎没有描述性。 Issue29695涵盖了这一点,事实上,该问题不仅影响 bool(),还影响其他类,如 int()list()。但是,从 Python 3.7 开始,这些关键字参数将被删除,速度应该会提高。尽管如此,我在最新的 Python 3.8 分支上测试了计时,bool() 比以前更快,但仍然比 truth() 慢两倍多,这大概是由于bool() 的更通用的实现。

因此,如果您有一项速度非常重要的任务,如果您需要一个函数(例如解析为 sorted() 的键)。然而,作为khelwood指出,bool() 有时仍然可以更快,例如 filter(bool, iterable),因此最好确定您的用例的时间最佳选择。

当然,如果您不需要函数而只是想测试一个值是还是,您应该使用惯用的ifif not 语句,其速度与 khelwood 和 user2357112 一样快评论了。

此问答是在与 ShadowRanger 进行广泛评论和讨论后产生的在 this question 下.

关于python - bool() 和 operator.truth() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49009870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com