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中for循环详解
Jan 17 Python
简述Python中的进程、线程、协程
Mar 18 Python
Python unittest模块用法实例分析
May 25 Python
python命令行参数用法实例分析
Jun 25 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
Python3 Click模块的使用方法详解
Feb 12 Python
Python基于Socket实现简单聊天室
Feb 17 Python
在python3中实现更新界面
Feb 21 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
Python装饰器如何实现修复过程解析
Sep 05 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
Zend Framework页面缓存实例
2014/06/25 PHP
PHP自定义错误用法示例
2016/09/28 PHP
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
Python实现多行注释的另类方法
2014/08/22 Python
django实现用户登陆功能详解
2017/12/11 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
Python全排列操作实例分析
2018/07/24 Python
python版本单链表实现代码
2018/09/28 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
Linux的文件类型
2012/03/07 面试题
教师实习自我鉴定
2013/12/18 职场文书
房地产还款计划书
2014/01/10 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
redis限流的实际应用
2021/04/24 Redis
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
MySQL数据库之存储过程 procedure
2022/06/16 MySQL
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers