Python 的函数式禅意:八条让代码更简单的经验法则
来源: testdouble.com — 2026-04-08
概述
Test Double 的 Kyle Adams 一篇实用向文章:借着「简单优于复杂」的 Python 之禅,给出八条把函数式编程原语当作简化 Python 码库的路标。逐条展开:地道代码优于非地道代码(Python 用列表推导而非处处 map,符合 Guido 的取舍);数据优于函数(医学剂量用查表而非算法,无逻辑即无需单测);纯函数优于不纯函数(double 恒返回 4,fetch_double 受网络牵制);纯函数优于类(类天生捆绑状态+行为更复杂);不纯函数与类不可避免就最小化它们(functional core, imperative shell);构造器无副作用优于有副作用(把取 token 挪到独立函数,避免污染 TimeService/TimeController 一层层上传);无 mock 的测试优于带 mock 的测试(mock 是需要、是副作用、是不纯的标志,大量 mock 常是代码味)。文章同时平和地回应 Guido 2013 年对函数式原语在 Python 可读性的质疑——过去十年 JS/TS 把这类原语普及给了「大多数程序员」,如今务实引入反而能导向简洁。
核心要点
八条法则均以「简单优于复杂」为纲:地道代码、数据、纯函数优先,尽量让副作用收进薄壳
Python 地道风格是列表推导而非处处 map/filter——Guido 自己就明言 map 只在该用的地方用
数据优于函数:医学剂量用三维字典查表而非实现算法,没有逻辑就无需写单元测试
构造器副作用是毒药:会沿依赖链向上传染,让每个依赖它的类及其测试都得 mock 外部系统
无 mock 测试更简单:mock 恰恰是「被测单元有外部依赖/副作用」的信号,大量 mock 常是代码味
回应 Guido 2013 年的质疑:如今 JS/TS 已把这些原语普及给主流程序员,务实引入可指引 Python 走向简洁
金句
Mocking is often a code smell in tests. A large amount of mocking is stinky code; it is an indicator that a test subject's dependencies have grown too complex.(测试里的 mock 往往是一种代码味——大量的 mock 是发臭的代码,它标示着被测对象的依赖已经复杂得过头了。)
👍 0
点赞
👎 0
沉底
返回 Lobsters 首页