如何学习Python开源项目代码
2019独角兽企业重金招聘Python工程师标准>>>
阅读Python开源项目代码主要有如下三个原因:
1. 在工作过程中遇到一些问题,Google和StackOverFlow等网站找不到解决办法,只能去翻源码。
2. 对某些项目或者方向非常感兴趣,希望深入。
3. 学习遇到瓶颈需要汲取开源项目的经验和用法来做提高。
没有目的的阅读开源项目就是耍流氓。浪费了时间,但是能学到的东西也很少。怎么样根据自身情况去阅读呢?
1. 和兴趣以及工作契合。举个例子,工作中没有机会用到Celery又不是想自己造个轮子,读它的源码做什么?所以要从平时能接触到的那些项目中选取。比如我,我肯定不去看Django的代码,因为日常工作基本遇不到,遇到了现翻就好了。
2. 一个方向只看一两个典型的就可以了。比如Web框架,我只看过Bottle和Flask的源码(其实之前也看过Django的,只是浅尝辄止),而且看Bottle已经是好几年前的事情了。并不是堆的多了更好,有时候反而选择太多会懵。
3. 不同技术阶段的选择代码量、复杂度不一样的项目,下面会具体推荐。
4. 清楚自己看代码的目的。就是你看代码是想了解人家怎么设计、调试BUG、还是只是想学习正确的编程用法呢?其实没有必要细抠每个代码细节,有时候当黑盒看,知道输入输出就可以了。
我个人的喜好
和工作中看别人代码差不多,基本每个人、每个项目、每个团队都有自己写代码的风格,比如变量命名风格、某些语言特性使用方式、代码规范要求、目录风格等,其实开源项目的作者也是一样。看代码,如看人(团队)。 首先介绍下我的喜好(排名分先后):
1. kennethreitz。requests和python-guide作者。他还有一个非常励志的故事,有兴趣的可以看 谁说程序员不是潜力股?
2. mitsuhiko。flask、Jinja2、werkzeug和flask-sqlalchemy作者。
3. sigmavirus24。flake8、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添加新的功能、帮助改善文档等等。很多时候你理解的其实和作者是有冲突的,无论是你说服他和被他说服,对自己的成长都是很有帮助的。
转载于:https://my.oschina.net/mindfind/blog/745571
如何学习Python开源项目代码相关推荐
- 如何读懂python代码_教你如何阅读 Python 开源项目代码
作者: Destiny 来源:https://learnku.com/articles/23010/teach-you-to-read-the-python-open-source-project-c ...
- 手机python代码阅读_教你阅读Python开源项目代码!
2021年FRM主要时间节点 2020年12月 第一阶段报名时间:2020/12/01 - 2021/01/31 首次注册:$1000 USD / 非首次注册:$590 USD 2021年02月 第二 ...
- 最值得阅读学习的 10 个 C 语言开源项目代码
本文转载于: 最值得阅读学习的 10 个 C 语言开源项目代码 从扩展思路的角度来说,一个程序员应该好好读过这样一些代码: 一个操作系统内核 一个编译器(如:gcc,lua) 一个解释器(如:pyth ...
- python开源项目学习目录
简述 本文为python开源项目的学习笔记 目录 翻译总结 可视化编程工具 持续集成系统 分布式系统 基于协程的高效爬虫 基于内存图形数据库 简易非关系数据库 调度程序 简易关系数据库 简易Pytho ...
- 精选180+Python开源项目,随你选!做项目何愁没代码
编辑 | Jane 出品 | Python大本营 每一位程序员,每天大部分时间都是在和代码打交道.但是对于广大的普通用户来说,最重要的不是代码,而是代码最终生成的应用程序.但是,每个项目都从头开始自己 ...
- python1000个常用代码-比较了1000多个Python开源项目,精选出这34个
原标题:比较了1000多个Python开源项目,精选出这34个 Mybridge比较了近1000个的Python开源库,并从中评选出34个最有用的工具来帮助你的开发,这些开源项目被分成8个大类,平均S ...
- python炫酷特效代码_推荐几个炫酷的 Python 开源项目
推荐几个炫酷的 Python 开源项目 项目一: Supervisor 简介: Supervisor 是实际企 业常用的一款 Linux/Unix 系统下的一个进程管理工具, 基于 Python 开发 ...
- 这里有10个优质Python开源项目,希望对你学习有帮助
导读:在过去的一个月中,我们对近250个Python开源项目进行了排名,选出了前十. 我们比较了在此期间有新的发布或是重大发布的项目.Mybridge AI基于多种因素对项目进行排名,以衡量其在专业人 ...
- python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作
python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...
最新文章
- document.all使用
- pytorch保存准确率_初学Pytorch:MNIST数据集训练详解
- CSS基本知识(慕课网)
- 第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)
- cxgrid 写数据_大线索报道:2020年策划人必备的50个写方案技巧
- 安装vue-devtool
- accept - 指示打印系统接受发往指定目标打印机的打印 任务
- 【PAT】1105 Spiral Matrix(柳婼的思想详细解读)
- 目标检测Anchor-free分支:基于关键点的目标检测(最新网络全面超越YOLOv3)
- Cisco IOS镜像文件的下载地址
- linux查看进程占用连接数,Linux命令排查线上问题常用的几个
- 思辨与创新 第二章 展开论证:如何让自己的想法被证明?
- 欢迎甲方跳槽到云厂商
- 用电位器通过STC12C2052AD单片机片内AD和PWM控制电机无极变速
- 无主键mysql表创建主键
- [附源码]java毕业设计归元种子销售管理系统
- Debian搭建ftp服务并使用虚拟账户登录
- 网络系统管理技能大赛知识点一
- Python 远程(邮件)控制电脑升级版
- spout 和bolt关系_在Bolt CMS中记录检索和分页
热门文章
- flash build 4.6 不能debug 报错 C:\WINDOWS\system32\...
- System.Transactions深入了解
- FSMO角色的Windows界面查看和转移示例
- 软件需求分析--三步走
- java编写词法分析器
- 【数论】【Polya定理】【枚举约数】【欧拉函数】【Java】poj2154 Color
- 知道这20个正则表达式,能让你少写1,000行代码
- 递归与分治之棋盘覆盖问题
- windows server2003 升级到windows server2012
- hdu 2897 巴什博弈变形