慕莱坞9460557
2025-02-10 22:59
a = True print(a and 0 or 99) # ==> 99
得到的计算结果不是布尔类型,而是数字99,这是为什么呢?
因为Python把0、空字符串和None看成False,其他数值和非空字符串都看成True,所以:
True and 0计算结果是0
继续计算0 or 99计算结果是 99
因此,结果是99。
需要注意的是,not计算的优先级是高于and和or的。
始终不明所以,求更详细的解说
在Python中,布尔运算符and和or的逻辑是基于“短路”(short-circuiting)的,这意味着它们会在确定结果后立即停止计算。具体规则如下:
and运算:
如果A为True(或者等价于True的值,如非零数字、非空字符串等),则返回B的值。
A and B:
- 如果A为False(或者等价于False的值,如0、None、空字符串""等),则直接返回A的值。
or运算:
如果A为True(或者等价于True的值),则直接返回A的值。
如果A``为False(或者等价于False的值),则返回B的值。
A or B:
a and 0:
a的值是True。
根据and的规则,True and 0会先判断True,因为True为真值,所以返回第二个值0。
因此,a and 0的结果是0。
**0 or 99:
** - 0是一个假值(等价于False)。
根据or的规则,0 or 99会先判断0,因为0为假值,所以返回第二个值99。
因此,0 or 99的结果是99。
所以,整个表达式a and 0 or 99的计算过程是:
先计算a and 0,结果是0。
再计算0 or 99,结果是99。
因此,最终输出的结果是99。
你提到的not运算符的优先级高于and和or,这是正确的。但在你的表达式中并没有not运算符,所以优先级问题在这里并不影响结果。
Python的布尔运算符and和or是基于短路逻辑的,它们会根据第一个操作数的值决定是否继续计算。
在你的例子中,a and 0的结果是0,而0 or 99的结果是99。
最终结果是99,而不是布尔值True或False,因为布尔运算的结果可以是任何值,而不仅仅是布尔类型。
Python3 入门教程
164530 学习 · 1135 问题
相似问题