python中逻辑运算符and 和 or 的优先级问题。

python的说明文档以及教材上、网上都说明and的优先级大于or。但我经过实际操作,发现其中规律似乎并不简单,下面我列举一些代码,来提出我的疑问:有时候or的优先级高,有时候and优先级高,并且并不是从左至右运算。

首先说明python当中的and 和 or运算逻辑如下(这里必须懂):

        1、and运算:a and b ,如果a为False,直接返回a,不计算后续。否则返回b。

        2、or运算:   a  or  b ,如果a为True,直接返回a,不计算后续。否则返回b。

        3、在python中0为False,非0为True。

下面展示让我困惑许久的代码:

1、下面代码不报错,说明了a or b ,如果a为True,则直接返回True,无须计算b的值。

print(True or 1/0)  #输出True。 说明or前如果是True,则不会进行or后边运算。

2、下面这行代码,没有报除零异常。说明并没有优先进行and运算

print(True or True and 1/0)   #输出True。 证明先进行or运算,后边and运算没进行。 

3、在python中0为False,非0为True。那么看下面代码:仍然说明并没有优先进行and运算

print(2 or 2 and 1/0)   #输出2。证明先进行or运算,后面and运算并没进行计算。

4、下面代码说明优先计算了and。否则 如果先计算or,结果应该是2;如果从左向右计算,结果应该是5。

print(0 and 2 or 4 or 1 and 5) #输出4。说明是先and后or。 等同于(0 and 2) or 4 or (1 and 5)    

针对以上问题,期盼有师者为我解惑!

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值