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
Python实现将16进制字符串转化为ascii字符的方法分析
Jul 21 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
python的unittest测试类代码实例
Dec 07 Python
Python处理文本换行符实例代码
Feb 03 Python
python中web框架的自定义创建
Sep 08 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
详解python算法常用技巧与内置库
Oct 17 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
我的群发邮件程序
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php函数式编程简单示例
2019/08/08 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python开发之thread线程基础实例入门
2015/11/11 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
python进行两个表格对比的方法
2018/06/27 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
祖国在我心中演讲稿600字
2014/05/04 职场文书
文案策划专业自荐信
2014/07/07 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
预备党员表决心的话
2015/09/22 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle