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中的函数编程
Apr 13 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
python3判断url链接是否为404的方法
Aug 10 Python
利用nohup来开启python文件的方法
Jan 14 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
Python基于Socket实现简单聊天室
Feb 17 Python
使用Django清空数据库并重新生成
Apr 03 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
python基础学习之生成器与文件系统知识总结
May 25 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
关于页面优化和伪静态
2009/10/11 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
PHP查询分页的实现代码
2017/06/09 PHP
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python线程池的实现实例
2013/11/18 Python
Python单例模式的两种实现方法
2017/08/14 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
我的长生果教学反思
2014/04/28 职场文书
环境卫生标语
2014/06/09 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
毕业横幅标语
2014/10/08 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
新教师个人工作总结
2015/02/06 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL