百科狗-知识改变命运!
--

python3 中 and 和 or 运算规律

乐乐1年前 (2023-11-21)阅读数 16#技术干货
文章标签逻辑

一、包含一个逻辑运算符

首先从基本的概念着手,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():

python3 中 and 和 or 运算规律

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

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)