循环里拼一段 SQL,用加号写了十几行,数据一多程序明显变慢。换成 join 之后,时间从几秒降到零点几秒。python字符串拼接的写法不少,选错了性能差得挺远。

加号适合少量拼接

两个字符串直接用 + 连起来,简单直观:name = 'Tom' + ' ' + 'Lee'。缺点是不能和数字直接加,'age' + 18 会报 TypeError,得先 str(18)。循环里不断 += 更要注意,字符串不可变,每次都会新建对象,数据量大时开销明显。

真要验证,用 timeit 跑一下:一百万个片段分别用 += 和 join,耗时能差出几十倍。数据量小的时候差别可以忽略,但循环拼接属于常见写法,养成用列表收集再 join 的习惯不亏。

join 适合列表和循环

有一堆片段要合成一个字符串,用分隔符.join(列表):','.join(['a', 'b', 'c'])。它先把内容准备好,再一次性分配内存,比循环里加号快得多。列表里必须全是字符串,有数字先用生成器转一遍:','.join(str(i) for i in nums)。

f-string 和 format 怎么选

需要把变量嵌进固定句子里,用 f-string 最清楚:f'共 {count} 条',Python 3.6 以后都支持。格式控制也方便,f'{price:.2f}' 保留两位小数。老代码里常见 '{}'.format(name),功能差不多,写法啰嗦一点。format 还能用位置参数,'{0}-{1}'.format(a, b),参数多时容易对错位置,f-string 直接写变量名更不容易出错。

几个容易踩的点

  • 拼接前统一类型,数字、None 都先转成字符串。
  • 大量文本别用 + 堆,append 到列表再 join。
  • 拼 SQL 不要直接拼用户输入,用参数化查询。
  • 路径拼接用 os.path.join 或 pathlib,别手写斜杠。

python字符串拼接没有唯一答案,少量拼接用 +,多段合并用 join,带变量输出用 f-string,按场景选就行。