为什么Python中两个值使用and运算符运算会返回最后一个值?
Python
and运算符与&按位运算符的行为差异说明 - 二者的设计定位完全不同
&属于按位运算符,仅针对整数类型生效,会对两个操作数的二进制位逐位执行与运算,返回运算后的整数值,你观测到的运行结果是该运算符的标准表现。and属于逻辑运算符,用于布尔逻辑判断,Python的逻辑运算符采用短路求值规则,且会直接返回决定整个表达式最终真值的操作数本身,而非固定返回布尔值True或False。
and的具体运算逻辑:
执行x and y表达式时:- 先计算第一个操作数
x的布尔真值:Python中所有对象都有默认布尔值,只有None、False、各类数值0、空序列/空集合(如''、[]、{})等少数对象的布尔值为假,其余对象默认布尔值均为真。 - 如果
x的布尔值为假,已经可以确定整个and表达式的结果为假,因此直接返回x,不再计算第二个操作数(即短路特性)。 - 如果
x的布尔值为真,整个表达式的最终结果由第二个操作数y决定,因此直接返回y本身。
- 先计算第一个操作数
你遇到的示例中第一个操作数b=3、'b'的布尔值均为真,因此最终返回的是第二个操作数的值,并不是and永远返回第二个变量,若第一个操作数为假,返回的就是第一个操作数:
>>> a = 11 >>> 0 and a 0 >>> '' and 'a' ''
如果需要得到布尔类型的判断结果,可以将and表达式传入bool()函数中转换即可。
内容的提问来源于stack exchange,提问作者tHeReaver
相关产品推荐
相关产品推荐

