
本篇文章主要介绍minitorch项目的module0所需要的基础工具以及一些python知识。
Functional Python
为什么用Functional Python
重点参考Functional tutorial文档。首先我们需要弄清楚为什么使用Functional python。MiniTorch 对外的接口(API)模仿 PyTorch 的标准用法,降低用户学习成本。而在内部,库的核心逻辑采用函数式编程风格,即通过纯函数(无副作用)和组合函数的方式构建计算逻辑。关于函数式编程,可以参考廖雪峰python博客(后续会专门开一个博客内容学习讲解函数式编程,函数是编程是一个很重要且复杂的topic)。函数式编程有如下两个优点:
- 更易测试
- 更易优化
函数式编程允许如下两件事情:
- 将一个函数作为参数传入另一个函数
- 将一个函数作为返回值返回
一个简单的例子
1 | # 支持type hints |
通过上述例子,来辅助我们的理解。上述例子需要完成一个任务:从一个数组中,挑选出数值大于4的数字并重新组合返回。如果使用传统写法,则针对不同的筛选条件,都要遍历并筛选,之间会有大量逻辑重复。通过使用函数式编程范式,将filter封装成一个函数并传参,可减少重复代码,且有更强的可扩展性。
MiniTorch项目的辅助工具
MiniTorch项目学习起来一个最大的优点,就是其对于测试,coding等规范性均做了详细的要求和工具辅助。black和flake等代码规范性检测工具,PyTest测试框架以及github CI版本管理和测试流程,以上均是本章讲解的重点。