为何两行Python表达式返回False?另一行返回True的原因
Python链式比较的规则解析
你遇到的问题核心不是运算符优先级,而是Python的比较运算符支持链式写法——包括in、is、==这类运算符,链式比较会被拆解成多个两两比较,只有所有比较结果都为True时,整个表达式才返回True。
第一个返回False的表达式:"a" in ["a", "b"] is True
这个表达式会被Python拆解为:("a" in ["a", "b"]) and (["a", "b"] is True)
- 第一部分
"a" in ["a", "b"]结果为True - 第二部分
["a", "b"] is True结果为False(列表对象和布尔值True是完全不同的对象)
逻辑与运算中只要有一个False,整体结果就是False,所以整个表达式返回False。
第二个返回False的表达式:False is False in [True]
同样被拆解为:(False is False) and (False in [True])
- 第一部分
False is False结果为True(Python中布尔值是单例对象) - 第二部分
False in [True]结果为False(列表中仅包含True)
逻辑与运算后整体结果为False。
返回True的表达式:"a" in ["a", "b"] == ["a", "b"]
拆解为:("a" in ["a", "b"]) and (["a", "b"] == ["a", "b"])
- 第一部分
"a" in ["a", "b"]是True - 第二部分
["a", "b"] == ["a", "b"]是True(列表内容相同,==比较值相等)
两个True做逻辑与运算,结果自然是True。
如果不想使用链式比较,可用括号明确分组,比如("a" in ["a", "b"]) is True,这样结果就会是True。
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

