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数据结构之Array用法实例
Oct 09 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python 标准差计算的实现(std)
Jul 29 Python
Python的in,is和id函数代码实例
Apr 18 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
python中HTMLParser模块知识点总结
Jan 25 Python
python中redis包操作数据库的教程
Apr 19 Python
python计算列表元素与乘积详情
Aug 05 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访问Google Search API的方法
2015/03/05 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
Python实现一个简单的验证码程序
2017/11/03 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
python中uuid模块实例浅析
2020/12/29 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
行政助理求职自荐信
2013/10/26 职场文书
大学生的网络创业计划书
2013/12/26 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
初中作文评语
2014/12/25 职场文书
教师个人总结范文
2015/02/11 职场文书
团员个人年度总结
2015/02/26 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP