python里or可以同时比较吗_Python 里 and、or 的计算规则是怎样的?

说实话看了一些回答,嗯....不做评价了。

Python里and和or的规则分为四类。一是逻辑判断,二是短路运算,三是优先级,and大于or(可以去Python官方文档搜Operator precedence),四是求值顺序。逻辑判断不解释。

2. 短路运算打字累,上代码。

>>> class A:

a = 0

b = 1

c = 2

# 下面三个都是@classmethod

def aAddOne(): return a += 1

def bAddOne(): return b += 1

def cAddOne(): return c += 1

短路运算举两个例子

例子1:不触发异常,因为短路运算,or前面是True,A.x不会执行。

>>> A.b or A.x

1

例子2:不触发异常,短路运算

>>> A.a and A.x

0

3. 优先级和结合次序

表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合。优先级只决定这一点,和其它的都无关。

结合性提一下,属于and,or运算符的性质,双目运算符,从左到右结合。

那么condition1 or condition2 and condition3或者condition1 and condition2 or condition3 and condition4的结果根本不是优先级自己能决定的,在这里不要想这么复杂的表达式的东西。就和加法和乘法一样,or和and也是二目运算符,and优先于or。单靠优先级并不能告诉你上面两种表达式的结果。就和a+b * c的结果等于a + (b * c)一样,优先级告诉你的就是condition1 or condition2 and condition3等于condition1 or (condition2 and condition3)而不是(condition1 or condition2) and condition3。优先级就做这么简单的事情,并不能单独决定表达式的结果,给优先级举那么多例子总结那么多规律都没用,(有些回答总结的规律也不是仅仅靠优先级完成的)有些回答说不存在的也不要信。

4. 求值顺序(从左到右求值)

求值顺序是非常容易被忽略的,忽略以后就会进入误区,千万不要觉得and运算符的优先级高,condition1 or condition2 and condition3就会先算condition2的结果再算condition3的结果再算他们and的结果等等,优先级只能决定结合次序并不决定求值顺序。不要被前面有些评论误导。

例子3:A.a是0没有短路,继续算or后面的A.b and A.c,返回的结果就是A.b and A.c的结果,是A.c = 2。

>>> A.a or A.b and A.c

2

例子4:A.b短路了or运算符,A.a还是等于0,并且不会抛出异常。千万别被误导以为a会加一然后抛出异常。

>>> A.b or A.aAddOne() and A.x

例子5:抛出没有y的异常,A.x被短路了不会被执行

>>> A.a and A.x or A.aAddOne() and A.y

no attribute 'y'的异常

有些地方后面改了前面可能忘记改了,会有错误,感谢指正。

我的理解可能也有错误的地方,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值