Python如何在最后参数为空字符串时自动调整字符串格式化输出
解决方案
你可以在父类中封装一个通用的智能格式化方法,不需要修改原有模式定义,也无需额外的条件判断分支,同时兼容Python 2.7和3.x全版本。
实现思路
- 封装统一的格式化工具方法,自动识别最后一位参数是否为空字符串
- 当末尾参数为空时,通过正则表达式自动移除模式字符串末尾的占位符,以及占位符前的所有分隔符内容
- 用处理后的模式和剩余非空参数完成格式化,原有子类的模式重写逻辑完全不受影响
代码实现
首先在父类Main中新增smart_format静态方法,将原有直接调用format的位置替换为该方法即可:
import re class Main: # 原有模式定义保持不变 pattern_for_a = "{} {} {}" pattern_for_b = "{} {}-{}" pattern_for_c = "{}-{} {}" # 新增智能格式化方法 @staticmethod def smart_format(pattern, *args): # 处理末尾空参数场景 if args and not args[-1]: # 移除末尾占位符及其前置分隔符 pattern = re.sub(r'[^{}]*\{\}$', '', pattern) args = args[:-1] return pattern.format(*args) def do_a(self, a1, a2, r): # 原有format调用替换为smart_format c = self.smart_format(self.pattern_for_a, a1, a2, r) return c
子类的模式重写逻辑完全不需要修改:
class B(Main): # 原有重写的模式保持不变 pattern_for_a = "{}:{} {}" pattern_for_b = "{}-{}{}" pattern_for_c = "{}{} {}"
测试验证
针对你给出的示例场景测试效果:
# 三个参数均有值的场景 pattern = "{}:{}-{}" print(Main.smart_format(pattern, "x", "y", "z")) # 输出:x:y-z # 末尾参数为空的场景 print(Main.smart_format(pattern, "x", "y", "")) # 输出:x:y
方案优势
- 无需修改原有任何模式定义,父类、子类的pattern配置都可以保持原样
- 只有一处封装好的空参数判断逻辑,不需要在业务代码中分散写大量
if else - 支持任意格式的分隔符,不需要提前枚举定义分隔符类型
- 所有语法兼容Python 2.7和3.x全版本
- 可扩展能力强:如果需要支持末尾多个参数为空的场景,只需调整方法为循环检查末尾空参数即可,示例如下:
@staticmethod def smart_format(pattern, *args): args = list(args) # 循环处理末尾所有空参数 while args and not args[-1]: pattern = re.sub(r'[^{}]*\{\}$', '', pattern) args.pop() return pattern.format(*args)
内容的提问来源于stack exchange,提问作者user3541631
相关产品推荐
相关产品推荐

