You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅调用strip类方法不同的Python重复代码如何优雅重构?

重构方案

核心思路是把不同mode对应的字符串处理方法做映射,彻底消除重复的分支逻辑,步骤如下:

  • 先定义mode到字符串方法名的映射字典,统一绑定对应关系
  • 提前标准化mode参数、完成参数合法性校验
  • 用getattr动态调用对应的处理方法,无需重复写多分支判断逻辑
  • 统一处理字符串输入和可迭代输入的分支,消除重复代码

重构后代码

def clean_whitespaces(input, mode='all'):
    # mode和对应字符串处理方法的映射关系
    strip_method_map = {
        'all': 'strip',
        'left': 'lstrip',
        'right': 'rstrip'
    }
    # 标准化mode参数,兼容None的情况
    mode = mode or 'all'
    # 参数合法性校验
    if mode not in strip_method_map:
        valid_modes = list(strip_method_map.keys()) + [None]
        raise ValueError(f'clean_whitespaces: mode must be one of {valid_modes}.')
    
    # 获取对应处理方法名
    method_name = strip_method_map[mode]
    
    # 统一处理逻辑
    if isinstance(input, str):
        return getattr(input, method_name)()
    else:
        return [getattr(entry, method_name)() for entry in list(input)]
优化说明
  • 代码量缩减近60%,所有逻辑仅实现一次,后续新增mode只需要在映射字典中添加对应关系即可,维护成本极低
  • 消除了重复的分支判断逻辑,避免后续迭代修改时多分支改漏的问题
  • 参数校验逻辑更清晰,合法mode列表不需要重复维护
  • 功能和原代码完全兼容,输入输出行为没有任何变化
  • 可选优化:如果担心参数名input和Python内置函数input重名,可以把参数名改为input_data,不影响原有功能逻辑

内容的提问来源于stack exchange,提问作者Lecker Spam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:27:07