python3 中 and 和 or 运算规律
一、包含一个逻辑运算符
首先从基本的概念着手,python中哪些对象会被当成False呢?而哪些又是True呢?
在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()或__len__()方法且方法返回0或False,则其实例也被当作False,其他对象均为True。
下面是最简单的逻辑运算:这里1,2都是Ture;0,‘’都是False
1and2==>21or2==>1
1and0==>01or0==>1
0and1==>00or1==>1
0and''==>00or''==>''
总结:
or从左到右,返回第一个为真的值,都为假返回后一个值
and从左到右,若所有值均为真,则返回后一个值,有一个假的值,则返回第一个假的值
二、包含两个及以上的逻辑运算符
逻辑运算符and/or一旦不止一个,其运算规则的核心思想就是短路逻辑。好的,那我们就来了解一下短路思想:
表达式从左至右运算,若or的左侧逻辑值为True,则短路or后所有的表达式(不管是and还是or),直接输出or左侧表达式。
表达式从左至右运算,若and的左侧逻辑值为False,则短路其后所有and表达式,直到有or出现,输出and左侧表达式到or的左侧,参与接下来的逻辑运算。
若or的左侧为False,或者and的左侧为True则不能使用短路逻辑。
就让我们从简单的开始,假设全是and语句或者全是or语句:
example1
defa():
print('A')
return[]
defb():
print('B')
return1
defc():
print('C')
return1
defd():
print('D')
return[]
defe():
print('E')
return1
ifa()andb()andc()andd()ande():
print('ok')
a()为假,其后均为and语句,全部短路,最终只返回a()的表达式。记住,所有被短路的表达式均不会被输出。所以,此处仅仅打印A。
example2
defa():
print('A')
return1
defb():
print('B')
return1
defc():
print('C')
return[]
defd():
print('D')
return1
defe():
print('E')
return1
ifa()andb()andc()andd()ande():
print('ok')
python从左至右先执行a(),a()返回的逻辑值为True,后面是and语句,所以不能短路其后,继续与b()进行逻辑运算,a()andb()输出b()的逻辑值True,接着与c()进行逻辑运算,b()andc()输出c()的逻辑值False,而其后均为and语句,则全部短路,最终只打印了ABC。
example3
defa():
print('A')
return1
defb():
print('B')
return1
defc():
print('C')
return[]
defd():
print('D')
return1
defe():
print('E')
return[]
ifa()orb()orc()ord()ore():
print('ok')
a()的逻辑值为True,其后均为or语句,全部短路,最终只打印了A,而if语句为True,所以还要打印一个ok。
example4
defa():
print('A')
return[]
defb():
print('B')
return[]
defc():
print('C')
return1
defd():
print('D')
return[]
defe():
print('E')
return1
ifa()orb()orc()ord()ore():
print('ok')
python从左至右先执行a(),a()返回的逻辑值为False,后面是or语句,所以不能短路其后,继续与b()进行逻辑运算,a()orb()输出b()的逻辑值False,接着与c()进行逻辑运算,b()orc()输出c()的逻辑值True,而其后为or语句,则全部短路,最终只打印了ABCok。
下面我们就来讲一下and与or语句同时存在的情况:
example5
defa():
print('A')
return[]
defb():
print('B')
return[]
defc():
print('C')
return1
defd():
print('D')
return[]
defe():
print('E')
return1
deff():
print('F')
return1
defg():
print('G')
return[]
defh():
print('H')
return1
ifa()andb()andc()andd()ore()andf()org()andh():
print('ok')
别以为语句很长就很难,我们好好分析一下,从左至右,首先a()的逻辑值为False,其后到or语句为止有三个and语句:a()andb()andc()andd(),均被短路。只输出a(),得到a()ore()为True,输出e(),得e()andF()为True,输出f(),其后接or语句,则短路其后所有。最终只打印了AEFok。(结合上面的三点,慢慢分析)
三.三元运算操作符
在python2.5之前,python是没有三元操作符的,GuidoVanRossum认为它并不能帮助python更加简洁,但是那些习惯了c、c++和java编程的程序员却尝试着用and或者or来模拟出三元操作符,而这利用的就是python的短路逻辑。
三元运算操作符bool?a:b,若bool为真则a,否则为b。
转化为python语言为:
boolandaorb
如何理解呢?首先a,b都为真,这是默认的。如果bool为真,则boolanda为真,输出a,短路b。如果bool为假,短路a,直接boolorb,输出b。
换一种更简单的写法:
returnaifboolelseb
以上内容为大家介绍了python3中and和or运算规律,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。http://www.baikegou.com/
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!