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实现在控制台输入密码不显示的方法
Jul 02 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
Windows下python3.7安装教程
Jul 31 Python
python爬虫超时的处理的实例
Dec 19 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
python获取响应某个字段值的3种实现方法
Apr 30 Python
Python3压缩和解压缩实现代码
Mar 01 Python
Python如何配置环境变量详解
May 18 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
第十三节--对象串行化
2006/11/16 PHP
实用函数2
2007/11/08 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
wxPython之解决闪烁的问题
2018/01/15 Python
python实现flappy bird游戏
2018/12/24 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
详解Django CAS 解决方案
2019/10/30 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
《我是什么》教学反思
2016/02/16 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript