曹开力 Kaili Cao

观点 · 我的Python风格

我的Python风格

我怎样组织和编写科研代码,让合作者不必问我,就能读懂、重新运行并继续扩展它。

Python哲学讲的是怎样思考代码;本页讲的是我自己的代码是什么样子。这里写的是习惯,不是规定:有用的就拿去,在别人的代码仓库里则沿用它原有的风格。例子来自我编写或参与编写的代码仓库:“无为”(Effortless,面向罗曼望远镜的快速线性图像重建)、PyIMCOM(它的前身,我主导了它的重构)、mesa_apokasc(红巨星的恒星模型)和ContEvol(一种求解微分方程的数值方法)。

项目怎样组织

读得懂的代码

图都由代码生成

说清改动的提交

有AI助手参与时

代码可以由助手来写,但必须有人能读懂、检查并解释其中的每一行(Python哲学)。

我保留的习惯

我有几个习惯和最常见的Python风格不同:几条简短的语句如果表达的是同一个意思,就写在同一行(if not mask_out[i]: continue);类通过__call__依次运行各个阶段;探索性笔记本中的开关注明设置的日期。给别人的代码做贡献时,我沿用它的风格,也从不把风格上的改动混进改变程序行为的提交。

有些习惯更适合原型,而不是多人共用的代码。代码的用户多了,它也会添上用户需要的东西:可以安装的程序包,每次改动都会运行的测试,以及取代打印输出的日志信息。