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 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
python实现复制文件到指定目录
Oct 16 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
python Gabor滤波器讲解
Oct 26 Python
Django 实现图片上传和下载功能
Dec 31 Python
Pygame Draw绘图函数的具体使用
Nov 17 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实现的在线人员函数库
2008/04/09 PHP
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
js简单实现交换Li的值
2014/05/22 Javascript
js格式化时间小结
2014/11/03 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
在python中安装basemap的教程
2018/09/20 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
小学学校评估方案
2014/06/08 职场文书
公证委托书标准格式
2014/09/11 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书