- 浏览: 273047 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
f002489:
我用Python爬了4400条淘宝商品数据,竟发现了这些“潜规 ...
爬取千万淘宝商品的python脚本 -
f002489:
java职业分析与技能图谱
java职业发展所应具有的技能。 学习路线图 -
f002489:
C#调用C++类库的几种方式C#委托实现C++ Dll中的回调 ...
C#中直接操作内存的方法 -
f002489:
如何测量C#代码的运行时间 :(1)用Datatime和Tme ...
C#中直接操作内存的方法 -
f002489:
使用c语言调用python小结
Python与C/C++相互调用
教你阅读Python开源项目代码
https://zhuanlan.zhihu.com/p/22275595?refer=python-cn
作者:董伟明
链接:https://zhuanlan.zhihu.com/p/22275595
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
知乎上有不少人问和关注阅读开源项目代码这个问题,比如「初学 Python,有哪些 Pythonic 的源码推荐阅读?」、「github中适合新人阅读的Python项目有哪些?」、「如何去阅读并学习一些优秀的开源框架的源码?」等。本文将从推荐可阅读的Python项目和如何阅读者2个方面聊聊这个话题。
阅读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领域代码写的最好的、最有创意的工程师。
初学者推荐阅读项目
初学者可以先阅读一些代码量比较少的,最好是单文件的项目:
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://zhuanlan.zhihu.com/p/22275595?refer=python-cn
作者:董伟明
链接:https://zhuanlan.zhihu.com/p/22275595
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
知乎上有不少人问和关注阅读开源项目代码这个问题,比如「初学 Python,有哪些 Pythonic 的源码推荐阅读?」、「github中适合新人阅读的Python项目有哪些?」、「如何去阅读并学习一些优秀的开源框架的源码?」等。本文将从推荐可阅读的Python项目和如何阅读者2个方面聊聊这个话题。
阅读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领域代码写的最好的、最有创意的工程师。
初学者推荐阅读项目
初学者可以先阅读一些代码量比较少的,最好是单文件的项目:
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添加新的功能、帮助改善文档等等。很多时候你理解的其实和作者是有冲突的,无论是你说服他和被他说服,对自己的成长都是很有帮助的。
发表评论
-
爬取千万淘宝商品的python脚本
2018-03-26 12:09 880importtime import leveldb fro ... -
Python与C/C++相互调用
2017-10-23 11:45 812Python实例浅谈之三Python与C/C++相互调用 -
python执行shell命令的四种方法
2016-12-28 22:36 1042#!/usr/bin/env python # -* ... -
Python 多进程应用示例
2016-12-06 00:01 515python中threading模块详解(一) http:/ ... -
Python多线程应用示例
2016-12-06 00:02 646import threading commonlist=r ... -
Python 字符串操作方法大全
2016-12-05 23:11 434http://www.jb51.net/article/479 ... -
python字符串连接的N种方式总结
2016-12-05 23:05 609python中有很多字符串连接方式,今天在写代码,顺便总结一下 ... -
Python常见格式化字符串方法小结【百分号与format方法】
2016-12-05 23:05 1371【方式一】百分号(%)方式,类C的printf,需要分别不 ... -
python 遍历文件夹 目录 文件
2016-12-03 17:26 1051http://www.cnblogs.com/kaituore ... -
人民币小写转大写程序,支持到万亿
2011-04-26 14:45 1707# -*- coding: gbk -*- #-------- ... -
用python正则表达式提取网页的url
2011-04-22 10:40 1610http://edu.codepub.com/2010/042 ... -
python中的三个读read(),readline()和readlines()
2011-04-21 18:07 17525我们谈到“文本处理”时,我们通常是指处理的内容。Pytho ... -
Python运算符重载__类常用的内置方法
2011-04-18 10:06 2435http://xukaizijian.blog.1 ... -
python对文件及文件夹的一些操作
2011-04-13 15:46 1808http://www.cnblogs.com/phoebus0 ... -
使用xlrd模块时对Excel
2011-04-13 15:44 0import xlrd def getExcelData(f ... -
Python异常处理
2011-04-13 15:34 1756http://www.cnblogs.com/phoebus0 ... -
使用xlrd模块时对Excel的日期处理
2011-04-02 11:54 2895http://blog.donews.com/limodou/ ... -
一个Python程序员的进化
2011-03-28 22:46 957http://developer.51cto.com/art/ ... -
年度黑马Python 自省指南(1)
2011-03-28 22:44 1322http://developer.51cto.com/art/ ... -
Django模板系统——过滤器
2011-03-23 15:40 1264过滤器,变量的显示形式的改变 一、形式:小写 {{ n ...
相关推荐
Python开源项目是编程界的一股强大力量,它为开发者提供了丰富的工具、框架和库,大大提升了开发效率和代码质量。这些项目涵盖了数据分析、机器学习、Web开发、自动化任务、网络爬虫、图像处理等多个领域。以下是...
Python爬虫开源项目代码是学习和实践Python网络爬虫技术的重要资源。这些开源项目提供了丰富的示例和实践经验,涵盖了各种爬虫技术的应用场景,对于初学者和进阶者都有很大的帮助。下面将详细阐述Python爬虫相关的...
Python开源项目之人工智能老照片修复算法学习 Bringing-Old-Photos-Back-to-Life-master完整代码,只为更加节省各位开发者的时间,开箱即用,无需烦恼各种确实配置等。 开源代码:...
20个很不错的Python项目源码,其中包括适合毕业设计的项目。这些资源中涵盖了Django 3版本的项目: Django+Mysql+Bulma实现的商场管理系统源码 Python+Django实现基于人脸识别的门禁管理系统 Python+Flask+MySQL实现...
项目概述:基于Python的Flask框架开源博客系统 本项目是一款基于Python的Flask Web框架开发的博客系统,源代码开放,可供学习和二次开发。技术栈涉及多种编程语言,包括Python、HTML、CSS、JavaScript及PHP,确保了...
教你如何做一个高大上的PythonicDeveloper多快好省地做Python开源项目。包含GitHub代码托管,在PyPI
项目概述:高效且开源的Python Django ERP系统,其源码涵盖全面的业务管理功能。该项目主要由Python语言编写,同时融合了HTML, JavaScript和CSS技术。 技术构成: - Python源文件:74个 - 电子表格文件:18个.xls -...
**PyMiner:基于Python与QT的开源软件开发详解** PyMiner是一款使用Python编程语言,结合QT图形用户界面库开发的开源软件。这个项目旨在为开发者提供一个强大的工具,用于进行各种编程任务,尤其适合那些希望利用...
以下是一些关于Python爬虫的知识点,以及提到的一些开源爬虫工具: 1. **Python爬虫源代码**: - Python爬虫源代码通常涉及到requests库用于发送HTTP请求,BeautifulSoup或lxml库解析HTML或XML文档,可能还会使用...
综上所述,关注和学习国内顶尖团队的Python开源项目,不仅可以汲取他们的技术精华,还能融入到全球的开发者社区,与大神同行,不断提升自己的技术水平。"open_source_team-master"这个文件很可能包含了一份详细列出...
本篇文章将深入探讨Python开源协议的相关知识。 首先,我们需要了解什么是开源协议。开源协议(Open Source Licenses)是一系列法律文件,它们规定了开源软件的使用、修改、复制和分发的条件。这些协议保障了开源...
教你如何做一个高大上的Pythonic Developer多快好省地做Python开源项目。包含GitHub代码托管, 在PyPI发布你的扩展包, 部署文档网站, 使用Travis-CI自动化测试, 一条龙全套服务。我做了一个工具, 可以让你仅仅填写...
Python开源项目中精选的Top30及所有源码的打包以及源文件下载地址。包含:Home-assistant,Pytorch,Grumpy,Sanic,Python-fire等30个源码程序,赶紧收藏。由于CSDN有240M上传限制,故分成两部分上传。
总的来说,这个基于Python的开源项目提供了一个完整的流程,从特征提取到最终的三维重建,覆盖了SFM、PMVS和CMVS的关键技术。对于学习和实践三维重建的开发者来说,这是一个宝贵的资源,它不仅简化了原本复杂的流程...
Awesome Python,收集的优质 Python 库和项目.zip,一份精选的python框架、库、软件和资源列表(本文档是一个 按主题排列的402个开源 Python 应用程序的列表) Contents Internet (34) Audio (17) Video (7) Graphics...
10. **最佳实践**:分享Python在GIS中的最佳实践,包括代码优化、错误处理、模块化编程以及版本控制,帮助读者提升项目质量和可维护性。 通过这个压缩包中的“pygis-bukun.pdf”,读者将全面掌握Python在GIS领域的...
通过学习和实践这个开源项目,你可以了解到Python的常用编程模式,如何编写可读性强、易于维护的代码,以及如何利用Python的库来解决实际问题。此外,参与开源项目也能提高你的协作和版本控制能力,因为你会接触到...