主要优化点:
* 命名合理
* 具有单一功能
* 包含文档注释
* 返回一个值
* 代码不超过 50 行
* 幂等,尽可能是纯函数
-- 命名
关于这个问题,我最喜欢的一句话(出自 Phil Karlton,总被误以为是 Donald Knuth 说的)是:
在计算机科学中只有两个难题:缓存失效和命名问题。
听起来有点匪夷所思,但整个不错的命名真的很难。下面就有一个糟糕的函数命名:
def get_knn(from_df):
我基本上在任何地方都见过糟糕的命名,但这个例子来自数据科学(或者说,机器学习),从业者总是在 Jupyter notebook 上写代码,然后尝试将那些不同的单元变成一个可理解的程序。
该函数命名的第一个问题是使用首字母缩写/缩略词。比起缩略词和并未普及的首字母缩写,完整的英语单词会更好。使用缩写的唯一原因是为了节省打字时间,但现代的编辑器都有自动补全功能,所以你只需键入一次全名。之所以说缩写是一个问题,是因为它们通常只能用于特定领域。在上面的代码中,knn 是指「K-Nearest Neighbors」,df 指的是「DataFrame」——无处不在的 Pandas 数据结构。如果另外一个不太熟悉这些缩写的编程人员正在阅读代码,那 TA 就会一头雾水。
关于这个函数名称,还有另外两个小问题:单词「get」无关紧要。对于大多数命名比较好的函数,很明显函数会返回一些东西,其名字会反映这一点。fr