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

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"的执行流程如下:

  1. 优先执行or左侧的逻辑:截取对应长度的选中数字拼成完整字符串,再用lstrip("0")去掉字符串开头所有的前导零,此时会产生两类结果:
    • 去完前导零后字符串非空:比如结果是"123"、"0"(原结果就是单个0的场景),这类非空字符串判定为真,or直接触发短路,把这个字符串作为返回值,完全不会执行右侧的"0"相关逻辑
    • 去完前导零后字符串为空:比如原拼接结果是"0000",所有前导零被删光后就剩空串"";或是最终要保留的数字长度为0,拼接出来本身就是空串。空串判定为假,or会继续判断右侧的操作数
  2. 当左侧结果为空串(假值)时,会判定右侧的"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:12:22