You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python表达式`"f" in "foo" == True`返回False的原因是什么?

你对运算符优先级的理解有误是问题的核心。在Python中,in和==属于同一优先级的比较运算符,而这类运算符支持「链式比较」的求值规则,和算术运算符的优先级结合逻辑完全不同。


链式比较的求值规则

Python对链式比较表达式 a 比较符1 b 比较符2 c 的求值逻辑等价于 (a 比较符1 b) and (b 比较符2 c),且中间的b只会被计算一次。


对应你的测试用例逐一解释

  1. 对于"f" in "foo" == True
    等价于 ("f" in "foo") and ("foo" == True)。前半段结果为True,后半段字符串"foo"和布尔值True显然不相等,结果为False,整体and运算后返回False,和你测试的结果一致。

  2. 对于你报错的测试用例"f" in ("foo" == True)
    你手动加括号改变了运算顺序,先算"foo" == True得到布尔值False,再判断"f"是否在布尔值里,自然触发类型错误,这也反过来验证了原表达式根本不是按这个顺序求值的。

  3. 对于你后续的两组测试

  • "f" in "foo" == "foo"等价于("f" in "foo") and ("foo" == "foo"),两个条件都为True,返回True
  • "f" in "foo" == "bar"等价于("f" in "foo") and ("foo" == "bar"),第二个条件不成立,返回False
    完全符合你观察到的现象。

补充验证

如果你确实需要先判断in的结果是否等于True,正确的加括号方式是("f" in "foo") == True,运行后会返回你预期的True结果。

内容的提问来源于stack exchange,提问作者Flasheenv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:06:00