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使用MySQLdb for Python操作数据库教程
Oct 11 Python
浅谈对yield的初步理解
May 29 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
python 默认参数相关知识详解
Sep 18 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
Python 定义只读属性的实现方式
Mar 05 Python
Python爬取12306车次信息代码详解
Aug 12 Python
python 绘制国旗的示例
Sep 27 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扩展imagick
2014/06/02 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
php图片裁剪函数
2018/10/31 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
python实现输入数字的连续加减方法
2018/06/22 Python
Python File(文件) 方法整理
2019/02/18 Python
Python虚拟环境venv用法详解
2020/05/25 Python
python实例化对象的具体方法
2020/06/17 Python
什么是python的函数体
2020/06/19 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
初三政治教学反思
2014/01/30 职场文书
烹调加工管理制度
2014/02/04 职场文书
捐款感谢信
2015/01/20 职场文书
产品调价通知函
2015/04/20 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
实习证明模板
2015/06/16 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏