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命令行参数解析OptionParser类用法实例
Oct 09 Python
Python实现控制台输入密码的方法
May 29 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python tkinter模版代码实例
Feb 05 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
python实现简易名片管理系统
Apr 11 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
PyTorch的Debug指南
May 07 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
PHP闭包实例解析
2014/09/08 PHP
php实现简单的上传进度条
2015/11/17 PHP
微信自定义分享php代码分析
2016/11/24 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python实现针对中文排序的方法
2017/05/09 Python
Python 多线程Threading初学教程
2017/08/22 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
自荐书模板
2013/12/15 职场文书
服务员态度差检讨书
2014/10/28 职场文书
单位考核聘任报告
2015/03/02 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS