ITPub博客

首页 > 应用开发 > Python > Python学习教程:Python中 and 和 or 运算短路逻辑

Python学习教程:Python中 and 和 or 运算短路逻辑

原创 Python 作者:千锋Python唐小强 时间:2020-06-03 17:25:56 0 删除 编辑

短路逻辑规则如下:

表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。若 or 的左侧逻辑值为 False ,则输出or右侧的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果。

Python学习教程:Python中 and 和 or 运算短路逻辑

表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。若 and 的左侧逻辑值为 True,则输出其后的表达式,不论其后表达式是真是假,整个表达式结果即为其后表达式的结果

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

注意:

1、在Python中and的优先级是大于or的,而且and和or都是会返回值的并且不转换为True和False。当not和and及or在一起运算时,优先级为是not>and>or

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

下面是最简单的逻辑运算:

        
True  
and 
True    
==> 
True                                     
True  
or 
True    
==> 
True

        True  and False   ==> False                                   True  or False   ==> True
        False and True    ==> False                                   False or True    ==> True
        False and False   ==> False                                   False or False   ==> False

接下来我们再举一个具体的例子:

先来定义一组函数:


1>  

def 
a
():


    2>     print ( 'A')

    3>     return 1

    4>  def b ():

    5>     print ( 'B')

    6>     return 1

    7>  def c ():

    8>     print ( 'C')

    9>     return []

    10> def d ():

    11>    print ( 'D')

    12>    return []

    13> def e ():

    14>    print ( 'E')

    15>    return 1   

例1:


17> 
if 
a() 
and 
b() 
and 
c() 
and 
d() 
and 
e():


    18>    print ( 'ok')

 

    #显示结果如下

    A   

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

例2:


17> 
if 
a() 
and 
b() 
and 
c() 
and 
d() 
and 
e():


    18>    print ( 'ok')

 

    #显示结果如下

    A

    B

    C   

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

例3:


17> 
if 
a() 
or 
b() 
or 
c() 
or 
d() 
or 
e():


    18>    print ( 'ok')

 

    #显示结果如下

    A

    Ok


 

    #显示结果如下

    A

    ok   

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

例4:

    
17> 
if 
a() 
or 
b() 
or 
c() 
or 
d() 
or 
e():


    18>    print ( 'ok')

 

    #显示结果如下

    A

    B

    C

    Ok

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

例5:

 
26> 
if 
a() 
and 
b() 
and  
c() 
and 
d() 
or 
e() 
and 
f() 
or 
g() 
and 
h():


    27>    print ( 'ok')

 

    #输出结果如下:

    A

    E

    F

    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 。

更多的Python教程也会继续更新!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69923331/viewspace-2696023/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-14

  • 博文量
    995
  • 访问量
    775631