为什么Python表达式1 in {1} == True的运行结果为False?
问题原因
这一现象是Python的比较运算符链式语法导致的,和运算符优先级、从左到右的求值顺序规则并不冲突。
Python中所有比较运算符(包含in、not in、==、!=、<、>等)都支持链式比较规则:形如a op1 b op2 c的表达式,等价于(a op1 b) and (b op2 c),且中间的b只会被求值一次。
你给出的代码1 in {1} == True实际等价于以下逻辑:
(1 in {1}) and ({1} == True)
分别计算两个子表达式:
1 in {1}结果为True{1} == True结果为False,注意:非空集合仅在布尔上下文判定中为真,做相等判断时,只有数值1和布尔值True相等,集合{1}和True的相等判定结果为假
两个子表达式做逻辑与运算,最终结果就是False。
误区说明
你之前认为表达式应该按(1 in {1}) == True计算,是对链式比较规则不了解导致的。如果强行按运算符优先级错误给表达式加括号为1 in ({1} == True),就会触发你提到的TypeError,也验证了Python并没有按这种优先级逻辑解析表达式。
内容的提问来源于stack exchange,提问作者bers
相关产品推荐
相关产品推荐

