You need to enable JavaScript to run this app. Python的if判断条件加括号与不加括号结果不同的原因是什么?
优惠活动
大模型
产品
解决方案
定价
更多

Python的if判断条件加括号与不加括号结果不同的原因是什么?

问题原因解析

这是Python运算符优先级规则导致的逻辑差异,is比较运算符的优先级高于逻辑运算符or,括号的存在改变了运算的执行顺序,最终两个判断的实际逻辑完全不同。

两种写法的实际执行逻辑

  • 带括号的写法:if (jewels or stones) is None:
    括号优先执行,先计算jewels or stones的结果,再判断该结果是否为None:

    Python中or运算会返回第一个为真的操作数,若所有操作数都为假则返回最后一个假值。
    因此该判断只有当jewels和stones同时为None时才会成立返回-1,其余正常输入(非None的空字符串、非空字符串)都不会触发提前返回,逻辑符合预期。

  • 不带括号的写法:if jewels or stones is None:
    由于is优先级更高,该代码实际等价于if (jewels) or (stones is None):,只要两个条件满足任意一个就会触发返回-1:

    1. jewels本身为真值(只要jewels是非空字符串就满足该条件)
    2. stones is None为真
      正常题目输入下jewels都是非空字符串,第一个条件始终为真,因此每次都会直接返回-1,结果不符合预期。

补充建议

判断参数是否为None的场景,建议直接拆分判断避免优先级踩坑:

if jewels is None or stones is None:
    return -1

如果还要额外判断空字符串,可以写成:

if not jewels or not stones:
    return -1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 04:27:04