如何学习Python开源项目代码

阅读Python开源项目代码主要有以下三个缘由:python

1. 在工做过程当中遇到一些问题,Google和StackOverFlow等网站找不到解决办法,只能去翻源码。git

2. 对某些项目或者方向很是感兴趣,但愿深刻。程序员

3. 学习遇到瓶颈须要汲取开源项目的经验和用法来作提升。github

没有目的的阅读开源项目就是耍流氓。浪费了时间,可是能学到的东西也不多。怎么样根据自身状况去阅读呢?web

1. 和兴趣以及工做契合。举个例子,工做中没有机会用到Celery又不是想本身造个轮子,读它的源码作什么?因此要从平时能接触到的那些项目中选取。好比我,我确定不去看Django的代码,由于平常工做基本遇不到,遇到了现翻就行了。sql

2. 一个方向只看一两个典型的就能够了。好比Web框架,我只看过Bottle和Flask的源码(其实以前也看过Django的,只是浅尝辄止),并且看Bottle已是好几年前的事情了。并非堆的多了更好,有时候反而选择太多会懵。数据库

3. 不一样技术阶段的选择代码量、复杂度不同的项目,下面会具体推荐。编程

4. 清楚本身看代码的目的。就是你看代码是想了解人家怎么设计、调试BUG、仍是只是想学习正确的编程用法呢?其实没有必要细抠每一个代码细节,有时候当黑盒看,知道输入输出就能够了。flask

我我的的喜爱

和工做中看别人代码差很少,基本每一个人、每一个项目、每一个团队都有本身写代码的风格,好比变量命名风格、某些语言特性使用方式、代码规范要求、目录风格等,其实开源项目的做者也是同样。看代码,如看人(团队)。 首先介绍下个人喜爱(排名分前后):设计模式

1. kennethreitz。requests和python-guide做者。他还有一个很是励志的故事,有兴趣的能够看 谁说程序员不是潜力股?

2. mitsuhiko。flask、Jinja二、werkzeug和flask-sqlalchemy做者。

3. sigmavirus24。flake八、pycodestyle(原pep8)、requests、urllib3等项目的主要贡献者和维护者。

4. ask。Celery及相关依赖的做者。

5. ajdavis。mongo-python-driver(pymongo)、tornado等项目的主要贡献者。

6. bitprophet。fabric、paramiko(Python的ssh库)做者。

前2个是公认的Python领域代码写的最好的、最有创意的工程师。

做者:董伟明
连接:https://zhuanlan.zhihu.com/p/22275595
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
 

初学者推荐阅读项目

初学者能够先阅读一些代码量比较少的,最好是单文件的项目:

1. GitHub - kennethreitz/pip-pop: Tools for managing requirements files.

2. GitHub - kennethreitz/envoy: Python Subprocesses for Humans™.

3. GitHub - kennethreitz/records: SQL for Humans™

4. GitHub - mitsuhiko/pluginbase: A simple but flexible plugin system for Python.

5. GitHub - mitsuhiko/pipsi: pip script installer

6. GitHub - mitsuhiko/unp: Unpacks things.

7. GitHub - chrisallenlane/cheat

8. GitHub - jek/blinker: A fast Python in-process signal/event dispatching system.

9. GitHub - mitsuhiko/platter: A useful helper for wheel deployments.

10. GitHub - kennethreitz/tablib: Python Module for Tabular Datasets in XLS, CSV, JSON, YAML, &c.

看代码主要是了解别人写代码的方式,语法实践这些内容。看完以后,你能够针对这些项目能解决的问题本身写个项目,写完以后和上述项目去对比一下,看看哪些方面作的很差。
 

进阶阅读项目

进阶的时候就要阅读一些相对复杂的项目,它们能帮助你提高Python编程技巧:

1. faif/python-patterns。使用Python实现一些设计模式的例子。

2. pallets/werkzeug。flask的WSGI工具集。其中包含了实现很是好的LocalProxy、cached_property、import_string、find_modules、TypeConversionDict等。

3. bottlepy/bottle。阅读一个Web框架对Web开发就会有更深入的理解,flask太大,bottle就4k多行,固然若是你有毅力和兴趣直接看flask是最好了的。

4. msiemens/tinydb。了解用Python实现数据库。

5. coleifer/peewee。了解ORM的实现。

6. pallets/click。click已经内置于在flask 0.11里,提供命令行功能,值得阅读。

7. mitsuhiko/flask-sqlalchemy。了解一个flask插件是怎么实现的。

除此以外Web开发者能够阅读一些相关的项目:

1. runscope/httpbin。使用flask,网站是httpbin(1): HTTP Client Testing Service

2. jahaja/psdash。使用flask和psutils的获取Linux系统信息的面板应用。

3. pallets/flask-website。 flask官方网站应用。

4. pypa/warehouse。若是你使用pyramid,这个新版的PYPI网站,能够帮助你理解不少。

固然,2个学习flask重要的资源必须爆一爆:

1. GitHub - realpython/discover-flask: Full Stack Web Development with Flask

2. The Flask Mega-Tutorial。 这个就是《Flask Web开发:基于Python的Web应用开发实战》的原始博客。

500lines

推荐一个很是厉害的项目 GitHub - aosabook/500lines: 500 Lines or Less, 它里面包含了22个由该领域的专家完成,用不到500行的代码实现一个特定功能的子项目。连Guido van Rossum都亲自来写基于asyncio爬虫了,Nick Coghlan、ajdavis也出场了。更具体的介绍能够看Python 的练手项目有哪些值得推荐? - 小小搬运工的回答

怎么阅读开源项目源码

我基于我的兴趣和平常开发须要阅读过一些开源项目,我列一些比较通用的经验和感悟:

1. 不要畏惧。我发现你们都常常会感叹XXX强大,YYY流行,无形中你会把它放在一个不可触及到的地位,感受它很难,而令本身不敢去挑战它。实际上是人就会产出bug,假如你发现它有问题,就应该抓住机会去验证它。这个过程当中,它的神秘感也就消失了,有过这么几回经验你就有信心了。其次是不要怕你提交的PR被拒绝。这是很是正常的,我有不少PR是被拒绝的,尤为是给标准库提交的Patch,绝大多数都被拒绝了。

2. 带着问题去阅读代码,这也是我认为最有效的方式。这会让你在阅读时候有个主线,比较有针对性。

3. 断点调试。在Python代码中使用pdb通常不太好使,由于代码复杂的话,这种断点须要你使用多个n跳到对应的位置,我通常都是先抛出异常,而后使用pdb的up/down/n等命令调试。固然在目标位置添加一些print日志或注释部分代码而后直接使用exit()退出也是能够的。

4. 善用文档,官网例子。阅读一个项目一开始会有点无从下手,那么就先好好这些内容,它们通常都是做者表达这个项目的第一个入口。quickstart、tutorial等内容中的最小化的例子其实就是最好的阅读入口,先去看这些引用的模块和调用的对应方法或者函数的对应实现,从下至上去阅读。

5. 理解做者的思考方式。不一样的项目要有不一样的思考方式来阅读,不要拧着本身的习惯去阅读,这样会很累,得尝试接受别人的观点,甚至于改变本身。

6. 阅读项目的早期版本。一些项目随着时间演进已经很是复杂了,读起来有难度,那么你能够回到项目的早期版本上,先去看相对简单地版本,而后设置几个时间点或者版本节点,渐进的来阅读。

7. 记忆并绘制项目架构。项目就是一堆代码的组合,除了学习编程技巧,还要了解项目的架构决策,这对于将来本身写大型项目很是用用。这种理解越补充,你会对它就愈来愈清晰。

8. 参与。若是只是看和思考而不参与,其实效果大打折扣。我建议要参与一些issue讨论、向做者提问、提PR添加新的功能、帮助改善文档等等。不少时候你理解的其实和做者是有冲突的,不管是你说服他和被他说服,对本身的成长都是颇有帮助的。

相关文章
相关标签/搜索