布尔逻辑表达式

布尔逻辑表达式中,除了评估到 TrueFalse,返回其解释为 TrueFalse。它是 Pythonic 表示逻辑的方式,否则可能需要 if-else 测试。

和运算符

and 运算符计算所有表达式,如果所有表达式求值为 True,则返回最后一个表达式。否则返回第一个计算为 False 的值:

>>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""

或者运算符

or 运算符从左到右计算表达式,并返回计算为 True 的第一个值或最后一个值(如果没有 True)。

>>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]

懒惰的评价

使用此方法时,请记住评估是懒惰的。不评估不需要评估以确定结果的表达式。例如:

>>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

在上面的例子中,print_me 永远不会执行,因为 Python 在遇到 0False)时可以确定整个表达式是 False。如果需要执行 print_me 来为你的程序逻辑提供服务,请记住这一点。

测试多种条件

检查多个条件时常见的错误是错误地应用逻辑。

这个例子试图检查两个变量是否都大于 2.语句被评估为 - if (a) and (b > 2)。这会产生意想不到的结果,因为当 a 不为零时,bool(a) 评估为 True

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')
    
yes

每个变量都需要单独进行比较。

>>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')
        
no

当检查变量是否是多个值之一时,会产生另一个类似的错误。此示例中的语句被评估为 - if (a == 3) or (4) or (6)。这会产生意想不到的结果,因为 bool(4)bool(6) 各自评估为 True

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
       
yes

同样,每次比较必须单独进行

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
        
no

使用 in 运算符是编写此函数的规范方法。

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
    
no