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通过索引遍历列表的方法
May 04 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
重写django的model下的objects模型管理器方式
May 15 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
python字典按照value排序方法
Dec 28 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
解读Python中degrees()方法的使用
2015/05/18 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
基于python实现名片管理系统
2018/11/30 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
新闻学专业个人求职信写作
2014/02/04 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
企业承诺书格式范文
2015/04/28 职场文书
宣传稿格式范文
2015/07/23 职场文书
高质量“欢迎词”
2019/04/03 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
Linux磁盘管理方法介绍
2022/06/01 Servers