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 THREADING模块中的JOIN()方法深入理解
Feb 18 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
python面试题小结附答案实例代码
Apr 11 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
用Python提取PDF表格的方法
Apr 11 Python
python通过新建环境安装tfx的问题
May 20 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 删除数组元素
2009/01/16 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
在Python中使用列表生成式的教程
2015/04/27 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
欢迎横幅标语
2014/06/17 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
2014年建筑工作总结
2014/11/26 职场文书
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫