教你阅读Python开源项目代码
为什么要阅读开源代码
阅读 Python 开源项目代码主要有如下三个原因:
- 在工作过程中遇到一些问题 Google 和 StackOverFlow 等网站找不到解决办法,只能去翻源码。
- 对某些项目或者方向非常感兴趣,希望深入。
- 学习遇到瓶颈需要汲取开源项目的经验和用法来做提高。
注意:很多人学Python过程中会遇到各种烦恼问题没有人帮答疑。为此小编建了个Python全栈免费答疑交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿,,一起相互监督共同进步!
要有目的的阅读开源项目
没有目的的阅读开源项目就是耍流氓,浪费了时间,但是能学到的东西也很少。怎么样根据自身情况去阅读呢?
- 和兴趣以及工作契合。举个例子,工作中没有机会用到 Celery 又不是想自己造个轮子,读它的源码做什么?所以要从平时能接触到的那些项目中选取。有时候不去看 Django 的代码,因为日常工作基本遇不到,遇到了现翻就好了。
- 一个方向只看一两个典型的就可以了。比如 Web 框架只看过 Bottle 和 Flask 的源码。
- 清楚自己看代码的目的。就是你看代码是想了解人家怎么设计、调试 BUG、还是只是想学习正确的编程用法呢?其实没有必要细抠每个代码细节,有时候当黑盒看,知道输入输出就可以了。
优秀的开源作者
和工作中看别人代码差不多,基本每个人、每个项目、每个团队都有自己写代码的风格,比如变量命名风格、某些语言特性使用方式、代码规范要求、目录风格等,其实开源项目的作者也是一样。看代码,如看人「团队」
- kennethreitz Requests 和 Python-guide 作者。他还有一个非常励志的故事,有兴趣的可以看 谁说程序员不是潜力股?
- mitsuhiko flask、Jinja2、werkzeug 和 flask-sqlalchemy 作者。
- sigmavirus24 flake8、pycodestyle「原 pep 8」、requests、urllib3 等项目的主要贡献者和维护者。
- ask Celery 及相关依赖的作者。
- ajdavis mongo-python-driver「pymongo」、tornado 等项目的主要贡献者。
- bitprophet fabric、paramiko「Python 的 ssh 库」作者。
前 2 个是公认的 Python 领域代码写的最好的、最有创意的工程师。
初学者推荐阅读项目
初学者可以先阅读一些代码量比较少的,最好是单文件的项目:
- GitHub - kennethreitz/pip-pop: Tools for managing requirements files
- GitHub - kennethreitz/envoy: Python Subprocesses for Humans™.
- GitHub - kennethreitz/records: SQL for Humans™
- GitHub - mitsuhiko/pluginbase: A simple but flexible plugin system for Python.
- GitHub - mitsuhiko/pipsi: pip script installer
- GitHub - mitsuhiko/unp: Unpacks things.
- GitHub - chrisallenlane/cheat
- GitHub - jek/blinker: A fast Python in-process signal/event dispatching system.
看代码主要是了解别人写代码的方式,语法实践这些内容。看完之后,你可以针对这些项目能解决的问题自己写个项目,写完之后和上述项目去对比一下,看看哪些方面做的不好。
进阶阅读项目
进阶的时候就要阅读一些相对复杂的项目,它们能帮助你提升 Python 编程技巧:
- faif/python-patterns 使用 Python 实现一些设计模式的例子。
- pallets/werkzeug flask 的 WSGI 工具集。其中包含了实现非常好的 LocalProxy、cached_property、import_string、find_modules、TypeConversionDict 等。
- bottlepy/bottle 阅读一个 Web 框架对 Web 开发就会有更深刻的理解,flask 太大,bottle 就 4k 多行,当然如果你有毅力和兴趣直接看 flask 是最好了的。
- msiemens/tinydb 了解用 Python 实现数据库。
- coleifer/peewee 了解 ORM 的实现。
- pallets/click click 已经内置于在 flask 0.11 里,提供命令行功能,值得阅读。
- mitsuhiko/flask-sqlalchemy 了解一个 flask 插件是怎么实现的。
除此之外 Web 开发者可以阅读一些相关的项目:
- runscope/httpbin 使用 flask
- jahaja/psdash 使用 flask 和 psutils 的获取 Linux 系统信息的面板应用。
- pallets/flask-website flask 官方网站应用。
- pypa/warehouse 如果你使用 pyramid,这个 新版的 PYPI 网站 可以帮助你理解很多。
500 Lines
推荐一个非常厉害的项目 GitHub - aosabook/500lines: 500 Lines or Less, 它里面包含了 22 个由该领域的专家完成,用不到 500 行的代码实现一个特定功能的子项目。连 Guido van Rossum 都亲自来写基于 asyncio 爬虫了,Nick Coghlan、ajdavis 也出场了。更具体的介绍可以看 Python 的练手项目有哪些值得推荐? - 小小搬运工的回答
建议
不要畏惧
大家都经常会感叹 XXX 强大,YYY 流行,无形中你会把它放在一个不可触及到的地位,感觉它很难,而令自己不敢去挑战它。其实是人就会产出 bug,假如你发现它有问题,就应该抓住机会去验证它。这个过程中,它的神秘感也就消失了,有过这么几次经验你就有信心了。其次是不要怕你提交的 PR 被拒绝。这是非常正常的,我有很多 PR 是被拒绝的,尤其是给标准库提交的 Patch,绝大多数都被拒绝了。
带着问题去阅读代码
这也是我认为最有效的方式。这会让你在阅读时候有个主线,比较有针对性。
断点调试
在 Python 代码中使用 pdb 一般不太好使,因为代码复杂的话,这种断点需要你使用多个 N 跳到对应的位置,我一般都是先抛出异常,然后使用 pdb 的 up、down、n
等命令调试。当然在目标位置添加一些 print 日志或注释部分代码然后直接使用 exit()
退出也是可以的。
善用文档
阅读一个项目一开始会有点无从下手,那么就先好好这些内容,它们一般都是作者表达这个项目的第一个入口。quickstart、tutorial 等内容中的最小化的例子其实就是最好的阅读入口,先去看这些引用的模块和调用的对应方法或者函数的对应实现,从下至上去阅读。
理解作者的思考方式
不同的项目要有不同的思考方式来阅读,不要拧着自己的习惯去阅读,这样会很累,得尝试接受别人的观点,甚至于改变自己。
阅读项目的早期版本
一些项目随着时间演进已经非常复杂了,读起来有难度,那么你可以回到项目的早期版本上,先去看相对简单地版本,然后设置几个时间点或者版本节点,渐进的来阅读。
记忆并绘制项目架构
项目就是一堆代码的组合,除了学习编程技巧,还要了解项目的架构决策,这对于未来自己写大型项目非常用用。这种理解越补充,你会对它就越来越清晰。
总结:很多人学Python过程中会遇到各种烦恼问题没有人帮答疑。为此小编建了个Python全栈免费答疑交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿,,一起相互监督共同进步!
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
教你阅读Python开源项目代码的更多相关文章
- 收藏 —— 教你阅读Python开源项目
https://zhuanlan.zhihu.com/p/22275595?refer=python-cn
- 嵌入式 十个最值得阅读学习的C开源项目代码
开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...
- 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
原文出处: 平凡之路的博客 欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...
- GitHub Python项目推荐|瓦力Devops开源项目代码部署平台持续部署
GitHub Python项目推荐|walle - 瓦力 Devops开源项目代码部署平台 项目热度 标星(star):8418 (很不错的实用项目,大神作品,建议关注) 标星趋势 关注(watch) ...
- python实战===2017年30个惊艳的Python开源项目 (转)
本文转自:http://www.sohu.com/a/216723120_115128 摘要:本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目.点击每一个都可以在GitHub ...
- 10大Python开源项目推荐(Github平均star2135)
翻译 | suisui 来源 | 人工智能头条(AI_Thinker) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2135,希望 ...
- Github上的python开源项目
Python开源项目,期待大家和我们一起共同维护 github排名榜单 https://github.com/trending github搜索榜单:https://github.com/search ...
- 【转】十个经典的C开源项目代码
原文: http://blog.51cto.com/chinalx1/2143904 --------------------------------------------------------- ...
- 机器学习 Top 20 Python 开源项目
转自:http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652565022&idx=1&sn=9aa035097120 ...
随机推荐
- Python学习小记(1)---import小记
在这种目录结构下,import fibo会实际导入fibo文件夹这个module λ tree /F 卷 Programs 的文件夹 PATH 列表 卷序列号为 BC56-3256 D:. │ fib ...
- python网络爬虫(三)requests库的13个控制访问参数及简单案例
酱酱~小编又来啦~
- 你一定看得懂的 DDD+CQRS+EDA+ES 核心思想与极简可运行代码示例
前言 随着分布式架构微服务的兴起,DDD(领域驱动设计).CQRS(命令查询职责分离).EDA(事件驱动架构).ES(事件溯源)等概念也一并成为时下的火热概念,我也在早些时候阅读了一些大佬的分析文,学 ...
- Microsoft.EntityFrameworkCore.Tools 相关命令
一.前言 Entity Framework(后面简称EF)作为微软家的ORM,自然而然从.NET Framework延续到了.NET Core. 二.程序包管理器控制台 为了能够在控制台中使用命令行来 ...
- SAP VL10B 报错 - 4500000317 000010 交付 $ 1 的交付项目 000010 与 POD 无关-
SAP VL10B 报错 - 4500000317 000010 交付 $ 1 的交付项目 000010 与 POD 无关- 如下公司间STO单据, 业务背景是货物从公司代码LYSP转入公司代码BTS ...
- cesium结合geoserver实现地图空间查询(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- 01.JS语法规范、变量与常量
前言: 学习一门编程语言的基本步骤 (01)了解背景知识 (02)搭建开发环境 (03)语法规范 (04)常量和变量 2.JS的开发环境 (1)浏览器自带的JS解释器(js引擎) (2 ...
- mysql 主主备份
1.1.主主备份原理. 主主备份实际上是互为主从,主要是为了去缓解写入压力. 1.2.环境准备 两台机器ip分别为 100.100.100.105 (主1) 100.100.100.106(主2) 安 ...
- P5788 【模板】单调栈
---------------- 链接:Miku ---------------- 单调栈模板终于不是一堆蓝题了!!!!!!!!!!!! 单调栈,就是单调的栈,栈内元素都是单调的. 题目要求我们求出来 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(9)
目录 autoreconf 命令的作用是什么? aclocal automake -a autoconf 一条命令搞完三面三步 既然有其他的「编译控制软件」为何还是使用 make 来进行编译控制? M ...