bool() https://docs.python.org/3/library/functions.html#bool and operator.truth() https://docs.python.org/3/library/operator.html#operator.truth两者都测试一个值是否是truthy or 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()
?
本问答是在与各方广泛评论和讨论后提出的暗影游侠 https://stackoverflow.com/users/364696/shadowranger under 这个问题 https://stackoverflow.com/questions/48909056/creating-a-list-within-a-list-in-python/.
虽然bool()
and operator.truth()
output主要用例的结果相同执行实际上是相当不同的。bool()
是类或类型构造函数,而truth()
是一个狭窄的优化正则函数。
实际上,也有两个区别:1)bool()
不带参数调用return
s False
while truth()
需要一个论证。 2)bool()
接受一个x
关键字参数,例如bool(x=1)
, while truth()
不接受关键字参数。这两者都会增加开销bool()
对于常规用例。
关键字的实现很奇怪,因为可能没有人需要它并且名称x
很难描述。问题29695 https://bugs.python.org/issue29695涵盖了这一点,事实上这个问题不仅影响bool()
但其他课程如int()
or list()
。然而,从 Python 3.7 开始,这些关键字参数将被删除,并且速度应该会提高。尽管如此,我在最新的 Python 3.8 分支上测试了时间,并且bool()
比以前快,但仍慢两倍以上truth()
,大概是由于更通用的实现bool()
.
因此,如果您的任务对速度非常重要,我建议使用truth()
over bool()
如果您需要一个函数(例如解析为键sorted()
)。然而,作为khelwood https://stackoverflow.com/users/3890632/khelwood指出,bool()
偶尔还是可以更快,比如filter(bool, iterable)
,因此最好对您的用例进行计时,以确定最佳选择。
当然,如果您不需要函数而只是想测试某个值是否为truthy or falsy你应该使用惯用语if
or if not
语句,最快的是 khelwood 和用户2357112 https://stackoverflow.com/users/2357112/user2357112评论道。
本问答是在与各方广泛评论和讨论后提出的暗影游侠 https://stackoverflow.com/users/364696/shadowranger under 这个问题 https://stackoverflow.com/questions/48909056/creating-a-list-within-a-list-in-python/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)