python字符串优化需避免+拼接,改用join;优先用format/f-string;简单操作用内置方法而非正则;高频正则须预编译;文件读取按需选编码策略。

避免频繁字符串拼接
Python中字符串是不可变对象,每次用+或+=拼接都会生成新字符串,大量操作时开销显著。例如循环中逐个添加短字符串,时间复杂度接近O(n²)。
推荐做法:
- 用list.append()先收集片段,最后调用''.join(list)一次性合并
- 处理模板类文本优先使用str.format()或f-string(Python 3.6+),它们内部已做优化
- 若需流式构建(如日志、HTML生成),考虑io.StringIO替代字符串累积
善用内置方法而非正则
对简单模式(如去空格、切分固定分隔符、大小写转换),内置字符串方法比re模块快5–10倍,且更易读。
常见高效替代:
立即学习“Python免费学习笔记(深入)”;
- s.strip() / s.lstrip() / s.rstrip() → 替代re.sub(r'^\s+|\s+$', '', s)
- s.split(',') → 比re.split(r',', s)快,除非需跳过空字段或处理嵌套分隔符
- s.replace('old', 'new') → 直接替换,比re.sub()简洁高效
预编译正则表达式
若同一正则模式在循环或高频函数中重复使用,务必用re.compile()提前编译。未编译时,每次调用re.search()等函数都会隐式编译,浪费CPU。
正确写法:
- 将pattern = re.compile(r'\d{3}-\d{2}-\d{4}')放在模块顶层或类属性中
- 后续直接调用pattern.search(text)或pattern.findall(text)
- 对多行文本匹配,加上re.MULTILINE标志;需忽略大小写,加re.IGNORECASE
按需选择编码与解码策略
处理文件或网络数据时,盲目用utf-8解码可能出错或拖慢速度。真实场景常含混合编码或BOM头。
实用建议:
- 读文件优先用open(..., encoding='utf-8-sig')自动剥离UTF-8 BOM
- 不确定编码时,用chardet库探测(仅首次),缓存结果,避免反复检测
- 纯ASCII文本处理可指定encoding='ascii',Python会跳过Unicode校验,提速约20%











