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 获取文件列表(或是目录例表)
Mar 25 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
Python实现读取文件最后n行的方法
Feb 23 Python
python使用pyqt写带界面工具的示例代码
Oct 23 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
python实现文件的分割与合并
Aug 29 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
pytorch中的transforms模块实例详解
Dec 31 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 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 Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
javascript 得到变量类型的函数
2010/05/19 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
利用Python批量生成任意尺寸的图片
2016/08/29 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
django缓存配置的几种方法详解
2018/07/16 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
Python  Django 母版和继承解析
2019/08/09 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
小小商店教学反思
2014/04/27 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
承诺书样本
2014/08/30 职场文书
国际贸易实训报告
2014/11/05 职场文书
出差报告怎么写
2014/11/06 职场文书
小学教代会开幕词
2016/03/04 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript