Python语言之python3 中 and 和 or 运算规律
小标 2018-08-09 来源 : 阅读 1178 评论 0

摘要:本文主要向大家介绍了Python语言之python3 中 and 和 or 运算规律,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了Python语言之python3 中 and 和 or 运算规律,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

一、包含一个逻辑运算符

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

def a():    print ('A')
   return []def b():    print ('B')
   return 1def c():    print ('C')
   return 1def 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

def a():    print ('A')    return 1def b():    print ('B')    return 1def c():    print ('C')    return []def d():    print ('D')    return 1def e():    print ('E')    return 1    
if a() and b() and c() and d() and e():    print ('ok')

python 从左至右先执行 a() ,a() 返回的逻辑值为 True,后面是 and 语句,所以不能短路其后,继续与 b() 进行逻辑运算,a() and b() 输出 b() 的逻辑值 True,接着与 c() 进行逻辑运算,b() and c() 输出 c() 的逻辑值 False,而其后均为 and 语句, 则全部短路,最终只打印了 A B C 。

example 3

def a():    print ('A')    return 1def b():    print ('B')    return 1def c():    print ('C')    return []def d():    print ('D')    return 1def e():    print ('E')    return []    
if a() or b() or c() or d() or e():    print ('ok')

a() 的逻辑值为 True ,其后均为 or 语句,全部短路,最终只打印了 A,而 if 语句为 True ,所以还要打印一个 ok。

example 4

def a():    print ('A')    return []def b():    print ('B')    return []def c():    print ('C')    return 1def d():    print ('D')    return []def e():    print ('E')    return 1    
if a() or b() or c() or d() or e():    print ('ok')

  python 从左至右先执行 a() ,a() 返回的逻辑值为 False,后面是 or 语句,所以不能短路其后,继续与 b() 进行逻辑运算,a() or b() 输出 b() 的逻辑值 False,接着与 c() 进行逻辑运算,b() or c() 输出 c() 的逻辑值 True,而其后为 or 语句, 则全部短路,最终只打印了 A B C ok。

 

 下面我们就来讲一下 and 与 or 语句同时存在的情况:

example 5

def a():    print ('A')    return []def b():    print ('B')    return []def c():    print ('C')    return 1def d():    print ('D')    return []def e():    print ('E')    return 1def f():    print ('F')    return 1def g():    print ('G')    return []def h():    print ('H')    return 1if a() and b() and  c() and d() or e() and f() or g() and h():    print ('ok')

  别以为语句很长就很难,我们好好分析一下,从左至右,首先a() 的逻辑值为 False,其后到 or 语句为止有三个 and 语句: a() and b() and c() and d(),均被短路。只输出 a(), 得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。最终只打印了A E F ok 。(结合上面的三点,慢慢分析)

3. 三元运算操作符

  在python2.5 之前,python 是没有三元操作符的,Guido Van Rossum 认为它并不能帮助 python 更加简洁,但是那些习惯了 c 、 c++ 和 java 编程的程序员却尝试着用 and 或者 or 来模拟出三元操作符,而这利用的就是python的短路逻辑。

  三元运算操作符 bool ? a : b ,若 bool 为真则 a ,否则为 b 。

  转化为 python 语言为:

        bool and a or b

  如何理解呢? 首先 a , b 都为真,这是默认的。如果 bool 为真, 则 bool and a 为真,输出 a ,短路 b 。如果 bool 为假,短路 a,直接 bool or b ,输出 b 。

  换一种更简单的写法:

        return a if bool else b

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程