分享python中and / or 的运算逻辑实例教程
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
【相关推荐】
以上是分享python中and / or 的运算逻辑实例教程的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

在 Sublime Text 中运行 Python 代码,需先安装 Python 插件,再创建 .py 文件并编写代码,最后按 Ctrl B 运行代码,输出会在控制台中显示。

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

在 Visual Studio Code(VSCode)中编写代码简单易行,只需安装 VSCode、创建项目、选择语言、创建文件、编写代码、保存并运行即可。VSCode 的优点包括跨平台、免费开源、强大功能、扩展丰富,以及轻量快速。

在 Notepad 中运行 Python 代码需要安装 Python 可执行文件和 NppExec 插件。安装 Python 并为其添加 PATH 后,在 NppExec 插件中配置命令为“python”、参数为“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通过快捷键“F6”运行 Python 代码。
