zoukankan      html  css  js  c++  java
  • Python中的短路计算

    在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,请看下面的代码:

    In [1]: a = True
    In [2]: print(a and 'a=T' or 'a=F')
    a=T

    输出为: a=T 

    计算结果不是布尔类型,而是字符串 a=T,这是为什么呢?

    因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True,所以:

    True and 'a=T' 计算结果是 'a=T' 
    继续计算 'a=T' or 'a=F' 计算结果还是 'a=T' 
    要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。

      在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。

      在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。

    所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

    再看下列案例:

    In [3]: a = "python"
    In [4]: print("hello,", a or "world")
    hello, python
    In [5]: b = ''
    In [6]: print("hello,", b or "world")
    hello, world

    原文地址:https://blog.csdn.net/Datawhale/article/details/80928137

  • 相关阅读:
    BZOJ1299 [LLH邀请赛]巧克力棒
    BZOJ1046 [HAOI2007]上升序列
    BZOJ1798 [Ahoi2009]Seq 维护序列seq
    BZOJ2045 双亲数
    BZOJ2301 [HAOI2011]Problem b
    BZOJ1021 [SHOI2008]Debt 循环的债务
    BZOJ2618 [Cqoi2006]凸多边形
    BZOJ1069 [SCOI2007]最大土地面积
    BZOJ1051 [HAOI2006]受欢迎的牛
    2017年09月23日普级组 环
  • 原文地址:https://www.cnblogs.com/yxtz271828/p/10790407.html
Copyright © 2011-2022 走看看