Python中and和or如何使用


Posted in Python onMay 28, 2020

Python中and、or是Python中的逻辑运算符,它们的用法如何呢?

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'

使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值

如果所有的值都为假,or 返回最后一个假值

注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值

and-or:

and-or 结合了前面的两种语法,推理即可。

>>> 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') 
#''

实例补充:

>>> a ='first'
>>> b ='second'
>>>1and a or b  # 等价于 bool = true时的情况
'first'
>>>0and a or b  # 等价于 bool = false时的情况
'second'
>>> a =''
>>>1and a or b  # a为假时,则出现问题
'second'
>>>(1and[a]or[b])[0]# 安全用法,因为[a]不可能为假,至少有一个元素
''
>>>

到此这篇关于Python中and和or如何使用的文章就介绍到这了,更多相关Python中and、or用法实例内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 获取et和excel的版本号
Apr 09 Python
python实现文件分组复制到不同目录的例子
Jun 04 Python
python通过post提交数据的方法
May 06 Python
Python获取网段内ping通IP的方法
Jan 31 Python
python操作excel让工作自动化
Aug 09 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
python基于机器学习预测股票交易信号
May 25 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 Python
Python如何安装第三方模块
May 28 #Python
python使用多线程+socket实现端口扫描
May 28 #Python
Python如何实现定时器功能
May 28 #Python
python实点云分割k-means(sklearn)详解
May 28 #Python
Python脚本实现监听服务器的思路代码详解
May 28 #Python
python中Ansible模块的Playbook的具体使用
May 28 #Python
python中如何进行连乘计算
May 28 #Python
You might like
用PHP将数据导入到Foxmail
2006/10/09 PHP
深入PHP异步执行的详解
2013/06/03 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
介绍Python的@property装饰器的用法
2015/04/28 Python
Python中的lstrip()方法使用简介
2015/05/19 Python
Python的迭代器和生成器
2015/07/29 Python
学Python 3的理由和必要性
2019/11/19 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
战略合作协议书范本
2014/04/18 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
死亡诗社观后感
2015/06/05 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书