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中的生成器和yield详细介绍
Jan 09 Python
在Linux下调试Python代码的各种方法
Apr 17 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
python3中的md5加密实例
May 29 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
Python动态导入模块的方法实例分析
Jun 28 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
python实现AES加密与解密
Mar 28 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 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实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
Python OS模块常用函数说明
2015/05/23 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
python多进程实现进程间通信实例
2017/11/24 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
python unichr函数知识点总结
2020/12/16 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
秋季运动会表扬稿
2014/01/16 职场文书
募捐倡议书
2014/04/14 职场文书
毕业大学生自荐信
2014/06/17 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
Python实现简单得递归下降Parser
2022/05/02 Python
MySQL 字符集 character
2022/05/04 MySQL