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


Posted in Python onApril 14, 2015

一、and:

在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。

>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'

在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。

如果布尔上下文中的某个值为假,则 and 返回第一个假值

二、or:

>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {}

{} >>> 0 or 'a' or 'c' 'a'

[code]

使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值
如果所有的值都为假,or 返回最后一个假值
注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值
三、and-or:
and-or 结合了前面的两种语法,推理即可。
[code]

>>> a='first' >>> b='second' >>> 1 and a or b 'first' >>> (1 and a) or b 'first' >>> 0 and a or b 'second' >>> (0 and a) or b 'second' >>>

这个语法看起来类似于 C 语言中的 bool ? a : b 表达式。整个表达式从左到右进行演算,所以先进行 and 表达式的演算。 1 and 'first' 演算值为 'first',然后 'first' or 'second' 的演算值为 'first'。

0 and 'first' 演算值为 False,然后 0 or 'second' 演算值为 'second'。

and-or主要是用来模仿 三目运算符 bool?a:b的,即当表达式bool为真,则取a否则取b。

and-or 技巧,bool and a or b 表达式,当 a 在布尔上下文中的值为假时,不会像 C 语言表达式 bool ? a : b 那样工作。

四、安全使用and-or

>>> a="" >>> b="second" >>> (1 and [a] or [b])

[''] >>> (1 and [a] or [b])[0] '' >>>

由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素。

一个负责的程序员应该将 and-or 技巧封装成一个函数:

def choose(bool,a,b): return (bool and [a] or [b])[0] print choose(1,'','second') #''
Python 相关文章推荐
python使用xauth方式登录饭否网然后发消息
Apr 11 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
python爬虫入门教程--快速理解HTTP协议(一)
May 25 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
Python Grid使用和布局详解
Jun 30 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
Python线程的两种编程方式
Apr 14 #Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 #Python
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 #Python
对于Python编程中一些重用与缩减的建议
Apr 14 #Python
归纳整理Python中的控制流语句的知识点
Apr 14 #Python
Python中为什么要用self探讨
Apr 14 #Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 #Python
You might like
PHP中file_get_contents高?用法实例
2014/09/24 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
深入浅出es6模板字符串
2017/08/26 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python实现二叉树的遍历
2017/12/11 Python
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
Oracle性能调优原则
2012/05/03 面试题
电子信息专业学生自荐信
2013/11/09 职场文书
求职自荐书范文
2013/12/04 职场文书
银行实习鉴定
2013/12/13 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
校园安全广播稿
2014/02/08 职场文书
向领导表决心的话
2014/03/11 职场文书
植物生产学专业求职信
2014/08/08 职场文书
支行行长岗位职责
2015/02/15 职场文书
质量保证书格式模板
2015/02/27 职场文书
新闻稿标题
2015/07/18 职场文书
《给予树》教学反思
2016/03/03 职场文书
导游词之长城八达岭
2019/09/24 职场文书
在js中修改html body的样式
2021/11/11 Javascript
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
服务器nginx权限被拒绝解决案例
2022/09/23 Servers