逻辑运算符

逻辑运算符

  逻辑运算符有三种:and、or、not(三者都是关键字),也就是与、或、非。

x and y  # 当x和y均为True时,此逻辑表达式为True,否则为False
x or y  # 当x和y之中至少有1个为True时,表达式结果位True,否则为False
not x  # 当x为True时,表达式结果为False;当x为False时,表达式结果为True

逻辑运算符常与比较运算符一起使用。

print("2 > 1 and 3 <= 2 is {}.".format(2 > 1 and 3 <= 2))
print("2 > 1 or 3 <= 2 is {}.".format(2 > 1 or 3 <= 2))

运行结果为:

2 > 1 and 3 <= 2 is False.
2 > 1 or 3 <= 2 is True.

  任何类型的值天生都具有布尔属性(True或False),这一点在逻辑表达式中得以体现。

print("not '' is {}.".format(not ''))  # 空字符串
print("not 0.0 is {}.".format(not 0.0))
print("not 0 is {}.".format(not 0))
print("not False is {}".format(not False))
print("not 2 is {}.".format(not 2))
print("not '*****' is {}.".format(not '*****'))

运行结果为:

not '' is True.
not 0.0 is True.
not 0 is True.
not False is True
not 2 is False.
not '*****' is False.

  可见,0的布尔属性是False,2的布尔属性是True。
  整数0、浮点数0.0、空字符串“”(‘’、‘’‘’‘’)、布尔值Flase的布尔属性均为False,这四种类型的其他值的布尔属性均为True。
  注意:只有空格的字符串不是空字符串。

print("0 or 0.0 or '' or False is {}.".format(0 or 0.0 or '' or False))

运行结果为:

0 or 0.0 or '' or False is False.

  可见,四者的布尔属性确实皆为False。
  上面的例子用到了逻辑运算符的复合形式,即一个表达式中有多个逻辑运算符。
  如果使用具体变量直接进行逻辑运算,结果会保留变量的原来面貌,如下例:

print(3 and 1.5)
print(3 or 1.5)
print(0 and 1.5)
print(0 or 1.5)

运行结果为:

1.5
3
0
1.5

  第3个表达式为False,其余全为True,这与结果的布尔属性相符。但是,第一个表达式结果是1.5,而第二个表达式结果为3,这是为什么呢?这里有必要介绍一下短路机制。

短路机制

  在进行与运算时,如果and的左值的布尔属性为False,那就不必再计算右值了(肯定为假),直接返回左值即可(短路机制生效,参考上面例子的第三个表达式);如果and的左值的布尔属性为True,必须接着计算右值,然后返回右值(参考第一个表达式)。
  在进行或运算时,如果or的左值的布尔属性为False,必须接着计算右值,然后返回右值(参考第四个表达式);如果or的左值的布尔属性为True,那就不必再计算右值了(肯定为真),直接返回左值即可(短路机制生效,参考第二个表达式)。
  通过下面的例子,可以更直观体会短路机制。

print('left' and 'middle' and 'right')
print('left' or 'middle' or 'right')

运行结果为:

right
left
    原文作者:Jacques/CS
    原文地址: https://blog.csdn.net/u011377894/article/details/106396733
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞