重构二次加工函数应优先使用对象方法简写实现链式调用,用内置方法替代手动遍历,封装成职责单一的类方法,通过@property和dataclass预处理提升可读性、可测性与纯净性。

直接用对象方法简写重构二次加工函数,核心是把“对数据做一连串操作”的过程,转成链式调用或属性驱动的表达,减少中间变量、嵌套和重复逻辑。关键不在炫技,而在让每一步意图清晰、可读、易测。
用内置方法替代手动遍历
遇到对列表、字典反复 for 循环+条件过滤+转换,优先查该类型是否已有对应方法。比如:
-
列表:用
filter()+map()或列表推导式,比手写 for 更紧凑;sorted(key=...)替代自定义排序逻辑 -
字典:用
dict.items()+ 推导式构造新字典;defaultdict或setdefault()避免 key 是否存在的判断分支 -
字符串:用
str.strip()、str.replace()、str.splitlines()等原生方法,不自己切片或正则(除非必须)
把加工步骤封装为类的方法
当一组加工逻辑总是成套出现(如“清洗→标准化→分类→聚合”),别堆在一个函数里。定义一个加工类,每个步骤是一个实例方法,返回 self 支持链式调用:
- 方法名用动词开头,如
.clean()、.normalize_names()、.group_by_category() - 每个方法只做一件事,内部不写业务判断,只做确定性转换
- 最终调用
.result()或.to_dict()获取加工后数据,避免污染原始输入
用 @property 和描述符隐藏计算逻辑
如果某些字段是“派生值”,且每次访问都需重新计算(比如总金额含税、状态标签、格式化时间),不要在主函数里反复算。在数据类中用 @property 封装:
- 把复杂表达式移到属性内部,调用方只需
obj.total_with_tax,语义明确 - 配合
@cached_property(Python 3.8+)避免重复计算,适合开销大的加工 - 若逻辑依赖外部上下文(如汇率、配置),可将上下文作为类初始化参数传入,保持方法纯净
用 dataclass + __post_init__ 预加工原始数据
接收原始结构(如 JSON 解析后的 dict)时,别在业务函数里做字段校验、默认值填充、类型转换。用 @dataclass 定义数据载体,并在 __post_init__ 中统一处理:
- 自动把字符串日期转
datetime,空字符串转None,数字字符串转int - 提前抛出
ValueError,让错误发生在数据进入业务逻辑前 - 后续所有加工函数都基于已清洗的数据模型操作,逻辑更干净










