如何避免Python字符串format模板中重复传递固定参数?
问题解答
你的这种实现方式不可行,原因如下:
str.format()要求替换所有占位符:
当你执行"I have {fruits_num} and I like {fruit_name} very much".format(fruits_num=fruits_num)时,字符串中还有{fruit_name}占位符未被赋值,Python会直接抛出KeyError: 'fruit_name',根本无法生成后续可用的s变量。str.format()返回新字符串,不修改原模板:
退一步说,即使能生成保留{fruit_name}的字符串(Python原生format不支持这一点),str.format()每次调用都会返回全新的字符串,原模板中的{fruits_num}已经被替换为具体数值,后续调用format时也不存在“复用之前赋值”的可能。
可行的替代方案
方案1:用字典封装固定参数,通过解包复用
把重复的固定参数存入字典,每次调用format时合并固定参数和可变参数,避免重复赋值:
def format_fruits(fruits_num): fixed_params = {"fruits_num": fruits_num} template = "I have {fruits_num} and I like {fruit_name} very much" # 合并固定参数和可变参数,解包传入format print(template.format(**fixed_params, fruit_name="apple")) print(template.format(**fixed_params, fruit_name="orange"))
方案2:使用functools.partial包装格式化方法
借助partial固定部分参数,简化后续调用:
from functools import partial def format_fruits(fruits_num): template = "I have {fruits_num} and I like {fruit_name} very much" # 固定fruits_num参数,生成新的格式化函数 partial_format = partial(template.format, fruits_num=fruits_num) print(partial_format(fruit_name="apple")) print(partial_format(fruit_name="orange"))
内容的提问来源于stack exchange,提问作者dasdasd
相关产品推荐
相关产品推荐

