首页 > Python基础教程 >
-
python3 中 and 和 or 运算规律
一、包含一个逻辑运算符
首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 True 呢?
在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了 __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。
下面是最简单的逻辑运算: 这里 1,2 都是Ture; 0,‘’都是False
1 and 2 ==> 2 1 or 2 ==> 1
1 and 0 ==> 0 1 or 0 ==> 1
0 and 1 ==> 0 0 or 1 ==> 1
0 and '' ==> 0 0 or '' ==> ''
总结:
or 从左到右,返回第一个为真的值,都为假返回后一个值
and 从左到右,若所有值均为真,则返回后一个值,有一个假的值,则返回第一个假的值
二、包含两个及以上的逻辑运算符
逻辑运算符 and / or 一旦不止一个,其运算规则的核心思想就是短路逻辑。好的,那我们就来了解一下短路思想:
表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。
表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。
若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。
就让我们从简单的开始,假设全是 and 语句 或者全是 or 语句:
example 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
def a(): print ( 'A' ) return [] def b(): print ( 'B' ) return 1 def c(): print ( 'C' ) return 1 def d(): print ( 'D' ) return [] def e(): print ( 'E' ) return 1 if a() and b() and c() and d() and e(): print ( 'ok' ) |
a() 为假 ,其后均为 and 语句,全部短路,最终只返回 a() 的表达式。记住,所有被短路的表达式均不会被输出。所以,此处仅仅打印 A 。
example 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
def a(): print ( 'A' ) return 1 def b(): print ( 'B' ) return 1 def c(): print ( 'C' ) return [] def d(): print ( 'D' ) return 1 def e(): print ( 'E' ) return 1 if a() and b() and c() and d() and e(): print ( 'ok' ) |