Python return语句中or运算符的作用及运行逻辑是什么
Python return语句中
or "0"写法的运行原理 你看到的代码存在一处手误:遍历过程中存储选中数字的列表变量名为selected_digits,最后return语句中切片用了未定义的stack,实际运行会触发NameError,修正后可运行的完整代码如下:
def removeKdigits(num,k): selected_digits=[] for digit in num: while k and selected_digits and selected_digits[-1] > digit: selected_digits.pop() k -= 1 selected_digits.append(digit) num_digits = len(num) - k return "".join(selected_digits[: num_digits]).lstrip("0") or "0"
Python中的or运算符并不固定返回布尔值,它遵循短路求值逻辑,规则如下:
- 从左到右依次判断每个操作数的布尔值
- 遇到第一个布尔值为*真(truthy)*的操作数时,直接返回这个操作数,不再执行后续判断
- 如果所有操作数的布尔值都为假(falsy),返回最后一个操作数
Python中字符串的布尔判定规则非常明确:
- 所有长度大于0的字符串,无论内容是什么,都判定为真
- 长度为0的空字符串
"",判定为假
对应到这行return语句,表达式"".join(selected_digits[: num_digits]).lstrip("0") or "0"的执行流程如下:
- 优先执行
or左侧的逻辑:截取对应长度的选中数字拼成完整字符串,再用lstrip("0")去掉字符串开头所有的前导零,此时会产生两类结果:- 去完前导零后字符串非空:比如结果是
"123"、"0"(原结果就是单个0的场景),这类非空字符串判定为真,or直接触发短路,把这个字符串作为返回值,完全不会执行右侧的"0"相关逻辑 - 去完前导零后字符串为空:比如原拼接结果是
"0000",所有前导零被删光后就剩空串"";或是最终要保留的数字长度为0,拼接出来本身就是空串。空串判定为假,or会继续判断右侧的操作数
- 去完前导零后字符串非空:比如结果是
- 当左侧结果为空串(假值)时,会判定右侧的
"0":"0"是长度为1的非空字符串,判定为真,直接返回"0"
几个实际运行的对应例子:
- 输入
num="1432", k=1:最终拼接结果是"132",去前导零后还是"132"(真值),直接返回"132" - 输入
num="10200", k=1:拼接结果是"0200",去前导零后是"200"(真值),返回"200" - 输入
num="1000", k=1:拼接结果是"000",去前导零后是空串(假值),触发右侧逻辑返回"0" - 输入
num="10", k=2:最终保留数字长度为0,拼接结果是空串,去前导零还是空串(假值),返回"0"
这种写法是Python里处理边界默认值的常用简洁写法,不需要额外写if not result: return "0"的分支判断,代码更紧凑。
内容的提问来源于stack exchange,提问作者Saibo-creator
相关产品推荐
相关产品推荐

