- 6.11. 布尔运算
6.11. 布尔运算
- or_test ::=
and_test
|or_test
"or"and_test
- and_test ::=
not_test
|and_test
"and"not_test
- not_test ::=
comparison
| "not"not_test
在执行布尔运算的情况下,或是当表达式被用于流程控制语句时,以下值会被解析为假值: False
, None
, 所有类型的数字零,以及空字符串和空容器(包括字符串、元组、列表、字典、集合与冻结集合)。 所有其他值都会被解析为真值。 用户自定义对象可通过提供 bool()
方法来定制其逻辑值。
运算符 not
将在其参数为假值时产生 True
,否则产生 False
。
表达式 x and y
首先对 x 求值;如果 x 为假则返回该值;否则对 y 求值并返回其结果值。
表达式 x or y
首先对 x 求值;如果 x 为真则返回该值;否则对 y 求值并返回其结果值。
请注意 and
和 or
都不限制其返回的值和类型必须为 False
和 True
,而是返回最终求值的参数。 此行为是有必要的,例如假设 s
为一个当其为空时应被替换为某个默认值的字符串,表达式 s or 'foo'
将产生希望的值。 由于 not
必须创建一个新值,不论其参数为何种类型它都会返回一个布尔值(例如,not 'foo'
结果为 False
而非 ''
。)