Python链式相等比较与and逻辑运算输出结果差异咨询
Python两类相等判断表达式结果差异原理
两类写法输出结果不同,核心是Python对链式比较、逻辑运算的执行规则存在本质区别,具体规则拆解:
- 链式比较(
a == b == c格式)的执行逻辑
Python的比较运算符(==、<、>、!=等)原生支持链式写法,这是Python区别于多数编程语言的特性。x op1 y op2 z不会按照左结合规则先算(x op1 y)再将结果和z做运算,而是会自动展开为(x op1 y) and (y op2 z),且中间的y只会被求值一次。
按照这个规则,2 == 2 == True的实际执行等价于:(2 == 2) and (2 == True)
第一部分2 == 2的运算结果为True;第二部分比较需要注意:Python中布尔类型是整数的子类,True对应的整数值为1,False对应的整数值为0,因此2 == True本质是2 == 1,结果为False。两部分做and运算后最终结果为False,和实际运行输出一致。
可以用1 == 1 == True做对照验证:该表达式展开后为(1==1) and (1==True),最终会返回True。 and逻辑运算(a == b and c格式)的执行逻辑2 == 2 and True是标准的短路逻辑运算,不属于链式比较范畴,执行规则为:从左到右依次求值,若左侧表达式的布尔值为假,直接返回左侧表达式的值,不再计算右侧;若左侧表达式布尔值为真,直接返回右侧表达式的值。
该表达式中左侧2 == 2的结果为True(布尔值为真),因此直接返回右侧的True,最终输出结果为True。
验证代码
你可以运行以下代码直观验证不同写法的差异:
# 链式比较相关验证 print(2 == 2 == True) # 输出False,等价于(2==2) and (2==True) print((2 == 2) == True) # 输出True,显式括号指定运算顺序后,才是先算2==2再和True比较 print(1 == 1 == True) # 输出True,因为True的整数值为1,和1相等 # and逻辑运算相关验证 print(2 == 2 and True) # 输出True print(0 and True) # 输出0,左侧布尔值为假,直接返回左侧值 print(100 and "demo") # 输出"demo",左侧布尔值为真,直接返回右侧值
内容的提问来源于stack exchange,提问作者Srikrishnan Adhiseshan
相关产品推荐
相关产品推荐

