最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

分享python中and/or的运算逻辑实例教程

来源:懂视网 责编:小采 时间:2020-11-27 14:24:14
文档

分享python中and/or的运算逻辑实例教程

分享python中and/or的运算逻辑实例教程:python中 and 和 or 运算的核心思想 ——— 短路逻辑 最近开始看廖雪峰的python教程,打算先把 《learn python the hard way》放一放,因为最后几章感觉还是有点难度(好吧,是我太弱了,不过慢慢来吧,一步一个脚印),想着看完廖雪峰的教程之后再回过头来,
推荐度:
导读分享python中and/or的运算逻辑实例教程:python中 and 和 or 运算的核心思想 ——— 短路逻辑 最近开始看廖雪峰的python教程,打算先把 《learn python the hard way》放一放,因为最后几章感觉还是有点难度(好吧,是我太弱了,不过慢慢来吧,一步一个脚印),想着看完廖雪峰的教程之后再回过头来,

python中 and 和 or 运算的核心思想 ——— 短路逻辑

  最近开始看廖雪峰的python教程,打算先把 《learn python the hard way》放一放,因为最后几章感觉还是有点难度(好吧,是我太弱了,不过慢慢来吧,一步一个脚印),想着看完廖雪峰的教程之后再回过头来,或许能有些思路。

  好吧,言归正传,今天之所以写这个,就是因为在廖雪峰教程里 filter 一章里出现了 and / or 的运算,之前的教程没有提到过这个,刚看的时候有些困惑,一头雾水,代码如下:

 #把一个序列中的空字符串删掉

 1> def not_empty(s):
 2> return s and s.strip()
 3>
 4> filter(not_empty, ['A', '', 'B', None, 'C', ' '])

  后来在网上查了一些关于 and / or 的运算逻辑,加上自己的理解,总结如下(不知是否有误,若有纰漏,还请各位斧正):

1. 包含一个逻辑运算符

  首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 True 呢?

**在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了  nonzero () 或  len () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。**

  下面是最简单的逻辑运算:

 True and True ==> True   True or True ==> True
 True and False ==> False   True or False ==> True
 False and True ==> False   False or True ==> True
 False and False ==> False   False or False ==> False

  利用上面两点我们就可以举一些例子:

example 1

 >>> a = [0, 1, '' ,3]
 >>> a[0] and a[1]
 0

  a[0] = 0 , a[1] = 1 , 所以 a[0] and a[1] 就变成了 0 and 1 (False and True),所以为 0 (False)。

example 2

 >>> a = [0, 1, '' ,3]
 >>> a[2] and a[1]
 ''

  两个同时为 False ,返回左边的值。

2. 包含两个及以上的逻辑运算符

  逻辑运算符 and / or 一旦不止一个,其运算规则的核心思想就是短路逻辑。好的,那我们就来了解一下短路思想(本人归纳,可能与网上其他人的有些出入,且听我慢慢分析):

表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式,直接输出 or 左侧表达式 。

表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。

若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

  可能有点抽象,没关系,我们接下来就举一些例子。

  这里有一个巧妙的方法,能让我们直观地了解 python 处理这些逻辑语句时的短路情况(我也是跟别人学的)

  好了,就让我们从简单的开始,假设全是 and 语句 或者全是 or 语句:

example 1

 1> def a():
 2> print 'A'
 3> return []
 4> def b():
 5> print 'B'
 6> return []
 7> def c():
 8> print 'C'
 9> return 1
 10> def d():
 11> print 'D'
 12> return []
 13> def e():
 14> print 'E'
 15> return 1
 16>
 17> if a() and b() and c() and d() and e():
 18> print 'ok'
 
 #显示结果如下
 A

  a() 的逻辑值为 False ,其后均为 and 语句,全部短路,最终返回 a() 的表达式。

example 2

 1> def a():
 2> print 'A'
 3> return 1
 4> def b():
 5> print 'B'
 6> return 1
 7> def c():
 8> print 'C'
 9> return []
 10> def d():
 11> print 'D'
 12> return []
 13> def e():
 14> print 'E'
 15> return 1
 16>
 17> if a() and b() and c() and d() and e():
 18> print 'ok'

 #显示结果如下
 A
 B
 C

  a() 的逻辑值为 True,不能短路其后,与 b() 进行逻辑运算,返回 b() 的逻辑值 True,与 c() 进行逻辑运算,返回 c() 的逻辑值 False,其后均为 and 语句, 则全部短路,最终返回 c() 的表达式。

example 3

 1> def a():
 2> print 'A'
 3> return 1
 4> def b():
 5> print 'B'
 6> return []
 7> def c():
 8> print 'C'
 9> return 1
 10> def d():
 11> print 'D'
 12> return []
 13> def e():
 14> print 'E'
 15> return 1
 16>
 17> if a() or b() or c() or d() or e():
 18> print 'ok'

 #显示结果如下
 A
 ok

  a() 的逻辑值为 True ,其后均为 or 语句,全部短路,最终返回 a() 的表达式。

example 4

 1> def a():
 2> print 'A'
 3> return []
 4> def b():
 5> print 'B'
 6> return []
 7> def c():
 8> print 'C'
 9> return 1
 10> def d():
 11> print 'D'
 12> return []
 13> def e():
 14> print 'E'
 15> return 1
 16>
 17> if a() or b() or c() or d() or e():
 18> print 'ok'

 #显示结果如下
 A
 B
 C
 ok

  a() 的逻辑值为 True,不能短路其后,与 b() 进行逻辑运算,返回 b() 的逻辑值 False,与 c() 进行逻辑运算,返回 c() 的逻辑值 True,其后均为 or 语句,则全部短路,最终返回 c() 的表达式。

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

example 5

 1> def a():
 2> print 'A'
 3> return []
 4> def b():
 5> print 'B'
 6> return []
 7> def c():
 8> print 'C'
 9> return 1
 10> def d():
 11> print 'D'
 12> return []
 13> def e():
 14> print 'E'
 15> return 1
 16> def f():
 17> print 'F'
 18> return 1
 19> def g():
 20> print 'G'
 21> return []
 22> def h():
 23> print 'H'
 24> return 1
 25>
 26> if a() and b() and c() and d() or e() and f() or g() and h():
 27> print 'ok'

 #
输出结果如下: A E F ok

  别以为语句很长就很难,我们好好分析一下,首先是 a() 的逻辑值为 False,其后到 or 语句为止有三条 and 语句: a() and b() and c() and d(),均被短路。得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。(结合我总结的短路逻辑的三点好好理解,应该没问题。)

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

【相关推荐】

1. Python and、or以及and-or语法总结

2. 解析python中and与or用法

3. 详细介绍Python中and和or实际用法

4. 总结Python的逻辑运算符and

5. Python:逻辑判断与运算符实例

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

分享python中and/or的运算逻辑实例教程

分享python中and/or的运算逻辑实例教程:python中 and 和 or 运算的核心思想 ——— 短路逻辑 最近开始看廖雪峰的python教程,打算先把 《learn python the hard way》放一放,因为最后几章感觉还是有点难度(好吧,是我太弱了,不过慢慢来吧,一步一个脚印),想着看完廖雪峰的教程之后再回过头来,
推荐度:
标签: and 逻辑 示例
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top