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库urllib与urllib2主要区别分析
Jul 13 Python
Python兔子毒药问题实例分析
Mar 05 Python
Python实现从百度API获取天气的方法
Mar 11 Python
Python实现微信公众平台自定义菜单实例
Mar 20 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
Keras之fit_generator与train_on_batch用法
Jun 17 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截取中文字符串的问题
2006/07/12 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
总结对比php中的多种序列化
2016/08/28 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
javascript 尚未实现错误解决办法
2008/11/27 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python3常见函数range()用法详解
2019/12/30 Python
怎样让char类型的东西转换成int类型
2013/12/09 面试题
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
大学生毕业自我鉴定
2013/11/06 职场文书
给客户的道歉信
2014/01/13 职场文书
设计师个人求职信范文
2014/02/02 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
授权委托书协议书
2014/10/16 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
个人专业技术总结
2015/03/05 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书