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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
python基于win32api实现键盘输入
Dec 09 Python
Python 虚拟环境工作原理解析
Dec 24 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python实现跨文件全局变量的方法
2014/07/07 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
高中体育教学反思
2014/01/24 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书