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逐行读取文件内容的三种方法
Jan 20 Python
低版本中Python除法运算小技巧
Apr 05 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python绘制频率分布直方图的示例
Jul 08 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
python文件排序的方法总结
Sep 13 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
Golang Web 框架Iris安装部署
Aug 14 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反转字符串函数strrev()函数的用法
2012/02/04 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
JS获取后台Cookies值的小例子
2013/03/04 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
AngularJS基础知识
2014/12/21 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
python中的多线程实例教程
2014/08/27 Python
在Python中使用SQLite的简单教程
2015/04/29 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python中引用与复制用法实例分析
2015/06/04 Python
Python的多态性实例分析
2015/07/07 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
高效使用Python字典的清单
2018/04/04 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python如何实现动态数组
2019/11/02 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
幼儿教师自我鉴定
2013/11/02 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
订货会主持词
2015/07/01 职场文书
村官2015年度工作总结
2015/10/14 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android