没有任何东西被转换;Python 布尔逻辑运算符改为short circuit。
请参阅布尔运算符文档:
表达式x and y
首先计算x
; 如果x
为假,则返回其值;否则,y
评估并返回结果值。
表达式x or y
首先计算x
; 如果x
为真,则返回其值;否则,y
评估并返回结果值。
此外,等于 的数字0
被认为是错误的,空字符串和容器也是如此。引用同一文件:
在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值被解释为 false:False
, None
, 所有类型的数字零,以及空字符串和容器(包括字符串、元组、列表、字典、集合和冻结集)。
结合这两种行为意味着对于0 and False
,0
被认为是假的,并在评估False
表达式之前返回。对于表达式True and 0
,True
被评估并发现是一个真值,所以0
返回。就if
andwhile
和其他布尔运算符而言,该结果0
也被认为是错误的。
您可以使用它来提供默认值,例如:
foo = bar or 'default'
要将非布尔值真正转换为布尔值,请使用bool()
type ; 它使用与布尔表达式相同的规则来确定输入的布尔值:
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool([])
False
>>> bool(True and 0)
False
>>> bool(1)
True
为了完成图片,在布尔上下文中不被认为是假的值被认为是真,包括任何自定义类。你可以通过在你的类上实现一个.__nonzero__()
特殊的方法来改变它。如果没有定义这样的方法,.__len__()
也请参考。使用这两种方法中的任何一种,您都可以表明您的类型是数字的,True
如果非零则应被考虑,或者它是一个容器,True
如果不为空(长度超过 0)则应被考虑。