看懂陌生代码
按数据流讲,而不是逐行翻译
解释下面这段代码。要求:1)先用一句话说它整体在干什么;2)按数据流讲:输入从哪来、经过哪些变换、输出到哪去;3)标出 2–3 个最容易看错的地方;4)指出任何看起来多余或可疑的代码。不要逐行翻译语法。 ``` [粘贴代码] ```
适合什么场景
- 接手别人的模块,或读一个没有文档的开源库入口文件。
- 要改一段代码但不确定副作用边界,先要一张数据流地图。
不适合的场景
- 代码是脚手架生成的配置:查官方文档比让模型解释快。
- 你只想知道某个函数的签名:直接看类型定义或 grep 调用点。
示例
输入
def settle(order, now=None):
now = now or datetime.utcnow()
if order.status != "paid" or order.settled_at:
return None
amt = order.amount - sum(r.amount for r in order.refunds)
ledger.post(order.id, amt, at=now)
order.settled_at = now
return amt你会得到
先用一句话说清它是「把已支付未结算的订单按扣除退款后的净额记入 ledger」,再沿数据流讲 status 判断 → 净额计算 → ledger.post 的副作用 → 写 settled_at。然后标出 `return None` 同时表示「不该结算」和「已结算」这处最易看错,以及先 post 后写 settled_at 导致的不原子。
常见误用
- 贴整个 2000 行文件求解释:输出会退化成逐段摘要,数据流断在文件边界。
- 只贴函数体,不贴 ledger.post 的签名和 order 模型:副作用会被猜错,解释看着合理但用不了。
可以这样改
- 加「只讲和结算金额有关的部分」,解释会聚焦到你要改的那条路径。
- 要求「按调用顺序画出来,并标出每步可能失败的地方」,输出从说明书变成故障点地图。