组件从边界开始
先写清输入是什么、输出是什么、失败时怎样报告。一个小组件不必很复杂,但它应该让错误变得可见。
def normalize_records(records, required=("firm_id", "year")):
missing = [name for name in required if name not in records.columns]
if missing:
raise ValueError(f"missing columns: {missing}")
return records.drop_duplicates(list(required))
最小交付清单
- 一个能运行的示例;
- 明确的输入、单位和缺失值约定;
- 对关键边界条件的测试;
- 记录版本与参数的输出。
复用不是“以后也许还能跑”,而是换一个人、换一批数据,仍然知道它做了什么。
