布尔上下文
在 Python 中,可以在布尔上下文中使用几乎所有类型的表达式。通常的数据类型的“空值”都为 False。
-
None
为假值 - 数值
0
,0.0
等为假值 - 空串
""
为假值 - 空列表
[]
为假值 - 空元组
()
为假值 - ...
逻辑演算
在 Python 中,and 和 or 按照下面的规则执行布尔逻辑演算:
对于 and,从左到右运算:
- 如果所有表达式都为真,则 and 返回最后一个表达式。
- 否则,and 返回第一个假值。
对于 or,从左到右运算:
- 如果有一个为真,则 or 立刻返回该值。
- 否则,or 返回最后一个表达式。
- or 找到第一个真值后会忽略计算剩余的表达式。
注意到:返回的并不是布尔值,而是其中某个参与比较的表达式值。
and-or 技巧
在 C 中,表达式 bool ? a : b
表示当 bool 为真时结果为 a,其它值则为 b。在 Python 中可以使用 and-or 实现类似的功能。
在这个 Python 表达式中,如果 test 为真,则返回 x,否则返回 y。
这里使用列表将 x 和 y 括起来是为了防止 x 为空值的情况,比如想要实现:“如果 test 为真,则取 0,如果 test 为假,则取 1”,如果不将 0 括起来则为:
不论 test 是真是假,都只会返回 1。