如何在不修改原字符串的前提下高效格式化生成新字符串?
高效利用字符串模板生成目标字符串且不修改原模板
首先明确:Python中的字符串是不可变类型,所有字符串操作(包括格式化)都不会原地修改原字符串,而是返回一个全新的字符串实例。所以你完全不用担心原模板会被格式化操作修改。
下面是几种高效生成目标字符串的方法:
1. 原生str.format()方法(推荐)
直接使用模板字符串的format()方法,每次调用都会基于原模板生成新字符串,原模板保持不变:
WORKER_TEMPLATE = "worker-{0}" # 生成各个目标字符串 worker_0 = WORKER_TEMPLATE.format(0) worker_2 = WORKER_TEMPLATE.format(2) worker_n = WORKER_TEMPLATE.format("N") # 原模板依然完好 print(WORKER_TEMPLATE) # 输出: worker-{0}
这种方法无需额外导入模块,语法简洁,是最常用的字符串格式化方式。
2. 使用string.Template类
如果你更喜欢命名式的占位符(而非位置索引),可以用标准库的Template类,同样不会修改原模板对象:
from string import Template WORKER_TEMPLATE = Template("worker-$num") worker_0 = WORKER_TEMPLATE.substitute(num=0) worker_2 = WORKER_TEMPLATE.substitute(num=2) worker_n = WORKER_TEMPLATE.substitute(num="N") # 原Template对象不受影响 print(WORKER_TEMPLATE.template) # 输出: worker-$num
关键原理说明
Python字符串的不可变性决定了:任何对字符串的修改操作(包括格式化、拼接、替换等)都不会改变原字符串的内容,而是创建并返回一个新的字符串对象。所以无论你调用多少次format(),原WORKER_TEMPLATE始终保持初始状态,不会被"原地修改"。
内容的提问来源于stack exchange,提问作者Xaver
相关产品推荐
相关产品推荐

