python3 中 and 和 or 运算规律

简介: python3 中 and 和 or 运算规律

一、包含一个逻辑运算符


首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 True 呢?


在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了  __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。


下面是最简单的逻辑运算: 这里 1,2 都是Ture;  0,‘’都是False


   1  and  2    ==> 2                1  or  2    ==>  1


   1  and  0    ==> 0                1  or  0    ==>  1


   0  and  1    ==> 0                0  or  1    ==>  1


   0  and  ''   ==> 0                0  or  ''   ==>  ''


总结:


or 从左到右,返回第一个为真的值,都为假返回后一个值


and 从左到右,若所有值均为真,则返回后一个值,有一个假的值,则返回第一个假的值


二、包含两个及以上的逻辑运算符


逻辑运算符 and / or 一旦不止一个,其运算规则的核心思想就是短路逻辑。好的,那我们就来了解一下短路思想:


表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。


表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。


若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。


就让我们从简单的开始,假设全是 and 语句 或者全是 or 语句:


example 1

def a():
    print ('A')
    return []
def b():
    print ('B')
    return 1
def c():
    print ('C')
    return 1
def d():
    print ('D')
    return []
def e():
    print ('E')
    return 1
if a() and b() and c() and d() and e():
    print ('ok')
——————


a() 为假 ,其后均为 and 语句,全部短路,最终只返回 a() 的表达式。记住,所有被短路的表达式均不会被输出。所以,此处仅仅打印 A 。

example 2

def a():
    print ('A')
    return 1
def b():
    print ('B')
    return 1
def c():
    print ('C')
    return []
def d():
    print ('D')
    return 1
def e():
    print ('E')
    return 1
if a() and b() and c() and d() and e():
    print ('ok')

python 从左至右先执行 a() ,a() 返回的逻辑值为 True,后面是 and 语句,所以不能短路其后,继续与 b() 进行逻辑运算,a() and b() 输出 b() 的逻辑值 True,接着与 c() 进行逻辑运算,b() and c() 输出 c() 的逻辑值 False,而其后均为 and 语句, 则全部短路,最终只打印了 A B C 。


example 3

def a():
    print ('A')
    return 1
def b():
    print ('B')
    return 1
def c():
    print ('C')
    return []
def d():
    print ('D')
    return 1
def e():
    print ('E')
    return []
if a() or b() or c() or d() or e():
    print ('ok')


a() 的逻辑值为 True ,其后均为 or 语句,全部短路,最终只打印了 A,而 if 语句为 True ,所以还要打印一个 ok。

example 4

def a():
    print ('A')
    return []
def b():
    print ('B')
    return []
def c():
    print ('C')
    return 1
def d():
    print ('D')
    return []
def e():
    print ('E')
    return 1
if a() or b() or c() or d() or e():
    print ('ok')


python 从左至右先执行 a() ,a() 返回的逻辑值为 False,后面是 or 语句,所以不能短路其后,继续与 b() 进行逻辑运算,a() or b() 输出 b() 的逻辑值 False,接着与 c() 进行逻辑运算,b() or c() 输出 c() 的逻辑值 True,而其后为 or 语句, 则全部短路,最终只打印了 A B C ok。


下面我们就来讲一下 and 与 or 语句同时存在的情况:


example 5

def a():
    print ('A')
    return []
def b():
    print ('B')
    return []
def c():
    print ('C')
    return 1
def d():
    print ('D')
    return []
def e():
    print ('E')
    return 1
def f():
    print ('F')
    return 1
def g():
    print ('G')
    return []
def h():
    print ('H')
    return 1
if a() and b() and  c() and d() or e() and f() or g() and h():
    print ('ok')

别以为语句很长就很难,我们好好分析一下,从左至右,首先a() 的逻辑值为 False,其后到 or 语句为止有三个 and 语句: a() and b() and c() and d(),均被短路。只输出 a(), 得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。最终只打印了A E F ok 。(结合上面的三点,慢慢分析)


三.  三元运算操作符


在python2.5 之前,python 是没有三元操作符的,Guido Van Rossum 认为它并不能帮助 python 更加简洁,但是那些习惯了 c 、 c++ 和 java 编程的程序员却尝试着用 and 或者 or 来模拟出三元操作符,而这利用的就是python的短路逻辑。


三元运算操作符 bool ? a : b ,若 bool 为真则 a ,否则为 b 。


转化为 python 语言为:

bool and a or b

如何理解呢? 首先 a , b 都为真,这是默认的。如果 bool 为真, 则 bool and a 为真,输出 a ,短路 b 。如果 bool 为假,短路 a,直接 bool or b ,输出 b 。

换一种更简单的写法:

return a if bool else b










相关文章
|
8月前
|
Python
python增量赋值运算的应用
Python中的增量赋值运算符用于便捷地执行算术操作,如`+=`, `-=`等,它们分别代表加法、减法、乘法、除法、取模、整除和幂运算。
59 1
|
8月前
|
Python
python幂运算——计算x的y次方
python幂运算——计算x的y次方
213 0
|
8月前
|
Python
python----输入输出&&算数运算
python----输入输出&&算数运算
62 0
|
7月前
|
数据处理 Python
彻底掌握Python集合:无序性、去重神器与高效集合运算指南
彻底掌握Python集合:无序性、去重神器与高效集合运算指南
195 1
|
2月前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
37 0
|
5月前
|
算法 数据处理 Python
Python中的集合的运算
Python中的集合的运算
|
6月前
|
Python
Python线程是操作系统能够进行运算的最小单位
【7月更文挑战第18天】Python线程是操作系统能够进行运算的最小单位
48 1
|
7月前
|
机器学习/深度学习 算法 Serverless
利用无穷级数逼近计算幂运算与开根号——Python实现
使用泰勒级数逼近法,本文介绍了如何用Python计算特殊幂运算,包括分数次幂和开根号。通过定义辅助函数,如`exp`、`getN_minus_n`、`multi`和`getnum`,实现了计算任意实数次幂的功能。实验结果显示,算法能有效计算不同情况下的幂运算,例如`0.09^2`、`1^2`、`0.25^2`、`0.09^(0.5)`、`1^(0.5)`和`0.25^(0.5)`。虽然精度可能有限,但可通过调整迭代次数平衡精度与计算速度。
|
7月前
|
Python
|
6月前
|
数据可视化 数据挖掘 数据处理
Python对Excel两列数据进行运算【从基础到高级的全面指南】
【7月更文挑战第6天】使用Python的`pandas`库处理Excel数据,涉及安装`pandas`和`openpyxl`,读取数据如`df = pd.read_excel('data.xlsx')`,进行运算如`df['Sum'] = df['Column1'] + df['Column2']`,并将结果写回Excel。`pandas`还支持数据筛选、分组、可视化、异常处理和性能优化。通过熟练运用这些功能,可以高效分析Excel表格。
343 0