查看原文
其他

阅读优秀的项目代码,几点实用的经验分享

The following article is from 懒编程 Author ayuliao

点击上方“Python编程时光”,选择“加为星标
第一时间关注Python技术干货!

后台回复关键字 “黑魔法”,即可获取明哥整理的《Python黑魔法指南


我阅读过一些比较知名的 Python 第三方库的源码,如 Flask、APScheduler、requests 等,虽然不多,但有点浅显的经验可以分享。

使用 tag

一个知名的项目,通常经过较长时间的开发,如 requests、pytest 等,从 github 上拉下来,直接开看,通常会有点闷逼,此时你可以按 tag 方式进行阅读,切到项目比较早期的阶段来看对应的代码。

如何切?

1. 通过 git tag 命令查看当前项目所拥有的 tag。2. 直接通过 git checkout tag_name 进行切换则可,如下图所示。

图中直接切换到 requests 第一个标签 v0.10.0 进行源码阅读,此时的 requests 相对于最新版肯定有很多没有考虑的,但其核心功能是实现好的,我们看源码需要先将这些最关键的掌握,这是精髓。

不必耻于阅读他人源码分析博客

很多知名库已经被很多人分析过了,此时可以先阅读他们的文章,不必为自己看他人源码分析文章而理解这个项目而感到羞耻,没有必要一定要自己从头理解,站在前人基础之上是更好的选择,我写的 Flask 源码分析系列,其实就是在前辈们的文章中理解的。

但再好的源码分析文章其信息含量与真正的源码依旧有一定的差距,所以在阅读他人文章时,对自己感兴趣的地方,可以直接以#TODO 的形式标记一下,后面回过头来看。

学会提问

花时间阅读一个项目的源码,必然是希望从中获得某些收货的,此时可以利用提问的技巧来达到这个目的。在阅读前,简单的定一些自己希望弄明白的问题,一开始只需要定一些简单问题,在阅读源码的过程中,这些问题会被解答,但同样会产生新的问题。

问题如同迷航中的路灯,避免我们迷思到代码中、为了读而读。最郁闷的可能就是一顿猛读后,到头两手空,而提出问题,尝试在源码中找到问题的答案可以从一定程度上避免这些问题,避免你在阅读的过程中深入太过细节的逻辑中。

最小可运行实例

让项目运行起来是快速理解代码的方式,当你想阅读一个项目时,构建出最小的可运行实例,利用 PyCharm 的 debug 功能加以辅助,让你可以穿梭与源码之中,多看变量中的值的变化,理解起来很快。

利用 Structure

如果项目中,对应的类过于庞大,此时可以利用 PyCharm 的 Structure 来概览整个类中的属性与方法,可以让你对这个类快速的有个整体认识。

不必完整的掌握源码

我看很多源码项目时,大致理清楚了整个项目最基本的使用方式,知道了类与类之间的关系,但却不明白这样设计的意义,pluggy 就让我有这样的困惑,我完全可以通过更简单的方式实现一个插件系统,不理解为何 pluggy 库要弄的这么绕。

这其实是正常现象,一是自己功力没到家,人家用来某种设计模式或设计哲学,自己没有接触过,其优势当然无法理解,二是项目在使用的过程中遇到了各种各样的场景需要修改与适配,经过一段时间的修改,项目本身的结构就发生了各种各样的修改,很多方法中都有各类 if 判断用于避免异常的出现,如果自己没有遇到对应的场景,这些异常现象不会被触发,当然无法理解。

所以阅读时,不必特别较真,除非你需要深度使用该库,否则到达一定深度有所收获则可。

变更日志

有时候我们需要深度使用某些第三方库,用于线上某些环境的支持,比如我们团队就定制了 APScheduler,此时就需要对这个库有比较深入的理解,对其异常判断执行的条件要有大致的认识。

如何以一个比较短的路径去理解项目源码呢?

看其变更日志是不错的选择,配合 tag 来看,可以更好的理解当初这个功能的 pr(pull request)为何会被合并进来,主要是解决什么问题或新增该功能的用处等等。



推荐阅读



太赞了!《Python 黑魔法指南》终于面世了

玩转 PyCharm ,这篇文章就够了

5年Python的我,总结了这90条写 Python 程序的建议

代码被反编译了?这两个小技巧能帮到你

pip install 和conda install有什么区别吗?

520情人节:属于Python 程序员的脱单攻略大合集




长按下图  ➡   关注博主

(按左边关注 Python, 按右边关注 Goalng


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存