我遇到了一些代码:
if bool(x):
doSomething
我认为以下内容可以完成相同的工作:
if x:
doSomething
The reference表示如果测试表达式
,它会评估套件发现是真的
引用说明了布尔表达式:
在布尔运算的上下文中,以及控制时使用表达式时,使用流语句 通过控制流语句,以下值被解释为 false:False,None,所有类型的数字零,以及空字符串和 containers ...所有其他值都被解释为true。
reference说bool()
函数:
使用标准真值测试程序
将值转换为布尔值
上述两个相同还是有一些额外的微妙之处?
答案 0 :(得分: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
答案 1 :(得分:7)
if
将使用__nonzero__()
(如果可用),bool()
在测试真值时也是如此。所以是,行为是等效的。
来自文档:
在布尔运算的上下文中,以及表达式时 在控制流语句中使用时,将解释以下值 as false:False,None,所有类型的数字零和空字符串 和容器(包括字符串,元组,列表,字典,集合 和frozensets)。所有其他值都被解释为true。 (见
__nonzero__()
更改此方法的特殊方法。)
调用实现真值测试,内置操作
bool();
应返回False或True,或者它们的整数等于0或 1.如果未定义此方法,则调用__len__()
(如果已定义),如果对象的结果非零,则认为该对象为true。 如果一个类既不定义__len__()
也不定义__nonzero__()
,那么它就是全部 实例被认为是真实的。
答案 2 :(得分:3)
您在if
语句中放置的任何对象都将基于某个内部python检查器转换为bool,通常不是问题,bool(x)
和(x)
之间没有区别在if
语句中时。
但是,bool(x)
存在的原因是针对以下情况:
return bool(x)
根据对象返回“true
或false
”。
答案 3 :(得分:0)
Afaik没有区别,如果x是'',None,0或False,它将被转换为False。