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:jewels本身为真值(只要jewels是非空字符串就满足该条件)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
相关产品推荐
相关产品推荐

