条件运算符 > 、 < 、 >= 、 <= 、 == 和 != 可用于组成简单条件,例如 grade>=60 。要将简单条件进行组合,构成更复杂的条件,可以使用布尔运算符 and 、 or 和 not 。
布尔运算符 and
要在执行控制语句的套件之前确保两个条件 都为 True ,可以使用布尔运算符 and 来组合条件。下面的代码定义了两个变量,当且仅当两个简单条件都为 True 时,测试条件为 True ,如果两个简单条件中的任何一个(或两个)为 False ,则整个 and 表达式的值为 False :
if 语句包含以下两个简单条件:
首先评估 and 运算符左侧的简单条件,因为 == 的优先级高于 and 。如有必要,接下来评估 and 右侧的简单条件,因为 >= 也具有比 and 更高的优先级。(后面会简要讨论为什么 只有 当左侧条件为 True 时,才会评估 and 运算符右侧的条件。)当且仅当两个简单条件 都为 True 时,整个 if 语句的条件为 True 。通过添加冗余括号可以使组合条件更清晰,如下:
下表称为真值表,通过显示 表达式1 和 表达式2 的值为 False 和 True 的所有四种可能组合来总结运算符 and 的运算规则。
布尔运算符 or
布尔运算符 or 可以测试两个条件中的一个 或 两个是否为 True 。在下面的代码中,如果其中一个 或 两个简单条件为 True 时,整个测试条件为 True ,当且仅当两个简单条件均为 False 时,整个测试条件为 False :
代码段 [6] 同样包含两个简单的条件:
运算符 and 的优先级高于 or 。下面的真值表总结了布尔运算符 or 的运算规则。
利用短路提高性能
一旦知道整个条件是否为 False ,Python就会停止计算 and 表达式。类似地,一旦知道整个条件是否为 True ,Python就会停止计算 or 表达式。这种机制称为 短路 。因此在条件
中,如果 gender 不等于 'Female' ,立即停止计算,因为整个表达式的值一定为 False ;否则继续执行,如果 age 大于或等于 65 ,整个表达式的值为 True 。
同样,在条件
中,如果 semester_average 大于或等于 90 ,立即停止计算,因为整个表达式的值一定为 True ;否则继续执行,因为如果 final_exam 大于或等于 90 ,整个表达式的值仍然可以是 True 。
在使用 and 表示条件时,应该将其值更有可能为 False 的条件放在最左边。同样,在使用运算符 or 的表达式中,应该将其值更有可能为 True 的条件放在最左边。这些技巧可以减少程序的执行时间。
布尔运算符 not
布尔运算符 not 表示“取反”,即 True 变为 False , False 变为 True 。 not 只有 一个 操作数,是 一元运算符 。如果原始条件(没有 not 运算符)为 False ,可以在条件之前放置 not 运算符来选择执行该路径,例如:
通常,我们会避免使用 not ,而是以更“自然”或方便的方式表达条件。例如,上面代码中的 if 语句也可以写成如下形式:
下表是 not 运算符的真值表。
下表从上到下按优先级的降序显示了运算符的优先级和结合性。