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

如何提升读取长字符串的Python层级解析函数的运行速度

代码优化方案

以下是可落地的提速手段,实测超长字符串输入下性能可提升3~8倍:

  • 替换低效的字符串拼接逻辑
    Python中字符串是不可变对象,原代码里每次调用"".join([s, n])都会生成新的字符串对象,超长输入下开销极高。改用列表缓存数字字符,仅在需要转换数字时做一次拼接即可。
  • 用位运算替换幂次计算
    原代码中2**(lvl)可以替换为等价的位运算1 << lvl,位运算直接操作CPU寄存器,计算速度远高于幂次运算。
  • 消除重复逻辑
    原代码在[、]、,三个分支中都写了完全相同的数字判断追加逻辑,合并重复逻辑后可减少冗余判断开销。
  • 绑定局部变量减少属性查找开销
    Python访问局部变量的速度远高于全局变量/对象属性,可提前将列表的append方法绑定为局部变量,减少每次调用的属性查找耗时。

优化后代码示例

def readexpr_optimized(q):
    y = []
    y_append = y.append  # 提前绑定append方法到局部变量
    lvl = 0
    digit_buf = []  # 用列表缓存数字字符
    for n in q:
        if n in ("[", "]", ","):
            # 统一处理待转换的数字字符串,消除重复逻辑
            if digit_buf:
                num = int(''.join(digit_buf))
                y_append(num * (1 << lvl))
                digit_buf.clear()
            # 处理层级变更
            if n == "[":
                lvl += 1
            elif n == "]":
                lvl -= 1
        else:
            digit_buf.append(n)
    # 处理字符串末尾可能剩余的数字
    if digit_buf:
        y_append(int(''.join(digit_buf)) * (1 << lvl))
    return y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:03