Skip to content

Latest commit

 

History

History
72 lines (47 loc) · 4.26 KB

File metadata and controls

72 lines (47 loc) · 4.26 KB

Python中的短路逻辑

短路逻辑规则如下:

  • 表达式从左至右运算,若or的左侧逻辑值为True,则短路 or 后所有的表达式(不管是and还是or),==直接输出or左侧表达式==。若or的左侧逻辑值为False,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
  • 表达式从左至右运算,若and的左侧逻辑值为False,则短路其后所有and表达式,==直到有or出现,输出and左侧表达式到or的左侧==,参与接下来的逻辑运算。若and的左侧逻辑值为True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
  • 若or的左侧为False,或者and的左侧为True则不能使用短路逻辑。

==注意:==

  1. 在Python中and的优先级是大于or的,而且and和or都是会返回值的并且不转换为True和False。当not和and以及or在一起运算时,优先级为是not>and>or
  2. 在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当做False,还有自定义类型,如果实现了__nonzero__()__len__()方法且方法返回0或False,则其实例也被当做False,其他对象均为True。

Python逻辑运算符

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

一种特殊情况(and和or的三目运算符):

==result = x < y and x or y==

首先判断条件x小于y的真假,

如果为真 and 会返回 x,然后计算x or y;

如果为假,and返回 False,然后计算False or y一定是返回y的。

拓展:

如下示例有助于理解短路逻辑的原理:

0 and 2  # 表达式从左至右运算,若and的左侧逻辑值为False,则短路其后所有and表达式
# 0

[] and 2  # 表达式从左至右运算,若and的左侧逻辑值为False,则短路其后所有and表达式
# []

2 and {}  # 表达式从左至右运算,若and的左侧逻辑值True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
# {}

[] and {}  # 表达式从左至右运算,若and的左侧逻辑值为False,则短路其后所有and表达式
# []

2 and 5  # 表达式从左至右运算,若and的左侧逻辑值True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
# 5

5 and 2  # 表达式从左至右运算,若and的左侧逻辑值True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
# 2

0 or 2  # 表达式从左至右运算,若or的左侧逻辑值为False,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
# 2

2 or []  # 表达式从左至右运算,若or的左侧逻辑值为True,则短路 or 后所有的表达式(不管是and还是or),直接输出or左侧表达式。
# 2

False or 5  # 表达式从左至右运算,若or的左侧逻辑值为False,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果
# 5

[] or {}  # 表达式从左至右运算,若or的左侧逻辑值为False,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果  
# {}

{} or False or []  # 表达式从左至右运算,若or的左侧逻辑值为False,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果  
# []