我遇到过一些代码:
if bool(x):
doSomething
Run Code Online (Sandbox Code Playgroud)
我认为以下会做同样的工作:
if x:
doSomething
Run Code Online (Sandbox Code Playgroud)
参考文献说,如果测试表达式,它会评估套件
被发现是真的
参考文献说布尔表达式:
在布尔运算的上下文中,并且当控制流语句使用表达式时,控制流语句使用语句,以下值被解释为false:False,None,所有类型的数字零,以及空字符串和容器......所有其他值都被解释为true.
在参考了的说bool()功能:
使用标准真值测试程序将值转换为布尔值
那么上面两个相同还是有一些额外的微妙之处呢?
Lan*_*aru 14
当对象放在if语句中时,它们会隐式转换为bool类型.因此,对于大多数的目的,有没有什么区别x,并bool(x)在if声明.但是,如果bool()因为正在进行函数调用而调用,则会产生额外的开销.这是一个快速测试来证明这一点:
In [7]: %timeit if(''): pass
10000000 loops, best of 3: 21.5 ns per loop
In [8]: %timeit if(bool('')): pass
1000000 loops, best of 3: 235 ns per loop
Run Code Online (Sandbox Code Playgroud)
if__nonzero__()如果可用,将使用,就像bool()测试真值的值一样.所以是的,行为是等同的.
从文档:
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:False,None,所有类型的数字零,以及空字符串和容器(包括字符串,元组,列表,字典) ,集和frozensets).所有其他值都被解释为true.(有关
__nonzero__()更改此方法的方法,请参阅 特殊方法.)
被调用来实现真值测试,内置操作
bool();应该返回False或True,或者它们的整数等价于0或1.如果没有定义此方法,__len__()则调用它,如果已定义,则对象被认为是真的,如果它的结果非零.如果一个类既未定义也__len__()未定义__nonzero__(),则其所有实例都被视为真.
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |