慕莱坞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 入门教程(新版)
156993 学习 · 1095 问题
相似问题