相关疑难解决方法(0)

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

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
Run Code Online (Sandbox Code Playgroud)

那有什么区别?我应该用truth()而不是bool()吗?

此问题下与ShadowRanger进行广泛的评论和讨论之后,出现了此问答.

python performance boolean python-2.7 python-3.x

14
推荐指数
1
解决办法
220
查看次数

为什么在CPython中`len(l)!= 0'比`bool(l)`快?

我正在做一些关于列表上的操作速度的实验。为此,我定义了两个列表:l_short = []l_long = list(range(10**7))

这个想法是bool(l)len(l) != 0

if比赛中,下面的实现是快了很多if l: pass,而不是if len(l) != 0: pass

但是没有if竞赛,我得到了以下结果:

%%timeit
len(l_long) != 0
# 59.8 ns ± 0.358 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%%timeit
bool(l_long)
# 63.3 ns ± 0.192 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Run Code Online (Sandbox Code Playgroud)

的时间bool稍长,为什么呢?

这是使用dis(FYI)的字节码

dis("len(l_long) != 0")
""" …
Run Code Online (Sandbox Code Playgroud)

python performance cpython python-3.x

9
推荐指数
1
解决办法
94
查看次数

标签 统计

performance ×2

python ×2

python-3.x ×2

boolean ×1

cpython ×1

python-2.7 ×1