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代码(逐级优化)
May 25 Python
Python with用法实例
Apr 14 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
Python环境变量设置方法
Aug 28 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Django中url的反向查询的方法
Mar 14 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Django生成数据库及添加用户报错解决方案
Oct 09 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 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 array_merge下进行数组合并的代码
2008/07/22 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
python实现图书管理系统
2018/03/12 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python实现端口检测的方法
2018/07/24 Python
200行python代码实现2048游戏
2019/07/17 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
八荣八耻演讲稿
2014/09/15 职场文书
销售2014年度工作总结
2014/12/08 职场文书
先进员工事迹材料
2014/12/20 职场文书
母亲节寄语大全
2015/02/27 职场文书
导游词之江南周庄
2019/12/06 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android