手把手教你阅读开源代码【附Python开源项目包】

2023-11-13

文末领取【Python开源项目包】


1

为什么要阅读开源代码

阅读 Python 开源项目代码主要有如下三个原因:

  • 在工作过程中遇到一些问题 Google 和 StackOverFlow 等网站找不到解决办法,只能去翻源码

  • 对某些项目或者方向非常感兴趣,希望深入

  • 学习遇到瓶颈需要汲取开源项目的经验和用法来做提高

2

要有目的的阅读开源项目

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

  • 和兴趣以及工作契合。举个例子,工作中没有机会用到 Celery 又不是想自己造个轮子,读它的源码做什么?所以要从平时能接触到的那些项目中选取。有时候不去看 Django 的代码,因为日常工作基本遇不到,遇到了现翻就好了。

  • 一个方向只看一两个典型的就可以了。比如 Web 框架只看过 Bottle 和 Flask 的源码。

  • 清楚自己看代码的目的。就是你看代码是想了解人家怎么设计、调试 BUG、还是只是想学习正确的编程用法呢?其实没有必要细抠每个代码细节,有时候当黑盒看,知道输入输出就可以了。

3

优秀的开源作者

和工作中看别人代码差不多,基本每个人、每个项目、每个团队都有自己写代码的风格,比如变量命名风格、某些语言特性使用方式、代码规范要求、目录风格等,其实开源项目的作者也是一样。看代码,如看人「团队」

  • kennethreitz Requests 和 Python-guide 作者。他还有一个非常励志的故事,有兴趣的可以看《谁说程序员不是潜力股?》https://zhuanlan.zhihu.com/p/22332669

  • 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 领域代码写的最好的、最有创意的工程师

4

初学者推荐阅读项目

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

  • kennethreitz/pip-pop: Tools for managing requirements files

  • kennethreitz/envoy: Python Subprocesses for Humans™.

  • kennethreitz/records: SQL for Humans™

  • mitsuhiko/pluginbase: A simple but flexible plugin system for Python

  • mitsuhiko/pipsi: pip script installer

  • itsuhiko/unp: Unpacks things

  • chrisallenlane/cheat

  • jek/blinker: A fast Python in-process signal/event dispatching system

????????????????????

初学者项目小编整理了合集

文末添加【小编】领取哦

看代码主要是了解别人写代码的方式,语法实践这些内容。看完之后,你可以针对这些项目能解决的问题自己写个项目,写完之后和上述项目去对比一下,看看哪些方面做的不好。

5

进阶阅读项目

进阶的时候就要阅读一些相对复杂的项目,它们能帮助你提升 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 网站 可以帮助你理解很多。

????????????????????

进阶项目小编整理了合集

文末添加【小编】领取哦

6

500 Lines

推荐一个非常厉害的项目 aosabook/500lines: 500 Lines or Less, 它里面包含了 22 个由该领域的专家完成,用不到 500 行的代码实现一个特定功能的子项目。连 Guido van Rossum 都亲自来写基于 asyncio 爬虫了,Nick Coghlan、ajdavis 也出场了。【这个项目小编也整理了,都在今日赠送的资料包中哦~】

7

建 议

1. 不要畏惧

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

2. 带着问题去阅读代码

这也是我认为最有效的方式。这会让你在阅读时候有个主线,比较有针对性。

3. 断点调试

在 Python 代码中使用 pdb 一般不太好使,因为代码复杂的话,这种断点需要你使用多个 N 跳到对应的位置,我一般都是先抛出异常,然后使用 pdb 的 up、down、n 等命令调试。当然在目标位置添加一些 print 日志或注释部分代码然后直接使用 exit() 退出也是可以的。

4. 善用文档

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

5. 理解作者的思考方式

不同的项目要有不同的思考方式来阅读,不要拧着自己的习惯去阅读,这样会很累,得尝试接受别人的观点,甚至于改变自己。

6. 阅读项目的早期版本

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

7. 记忆并绘制项目架构

项目就是一堆代码的组合,除了学习编程技巧,还要了解项目的架构决策,这对于未来自己写大型项目非常用用。这种理解越补充,你会对它就越来越清晰。

END -

Destiny | 作者

LearnKu | 来源

https://learnku.com/articles/23010/teach-you-to-read-the-python-open-source-project-code

添加小编领取Python开源项目包哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手把手教你阅读开源代码【附Python开源项目包】 的相关文章

随机推荐

  • 数据结构-二叉树-更新完整版

    目录 二叉树初识 实现二叉树的功能 功能前操作 遍历功能 操作 计算 查询功能 源码 因为上次二叉树的文章的功能不全 所以这次更新一个完整版的二叉树文章 这篇文章有些功能是需要用到队列知识的 所以对队列不了解的可以先去看看这篇队列 详解 因
  • Vue视频插件(vue-video-player)

    前言 在新的项目中用到了大量的视频 由此也学习了一款vue的前端视频播放插件 接下来分享一下 vue video player安装 npm install vue video player save npm install save vid
  • scala简介与安装

    一 简介 1 scala是啥 Scala用一种简洁的高级语言将面向对象和函数式编程结合在一起 Scala的静态类型有助于避免复杂应用程序中的错误 其JVM和JavaScript运行时使您能够轻松访问庞大的库生态系统来构建高性能系统 2 为啥
  • C++:派生类的默认构造函数和拷贝构造函数调用基类构造函数的机制(含程序验证)

    1 如果基类定义了不带参数的默认构造函数 则编译器为派生类自动生成的默认构造函数会调用基类的默认构造函数 2 如果基类定义了拷贝构造函数 则编译器为派生类自动生成的拷贝构造函数同样会调用基类的拷贝构造函数 3 如果基类定义了带参数的构造函数
  • Git-3-项目初体验

    Git的使用需求 IAR工程文件夹 包含多个工程 多个文件夹和文件 c文件 h文件以及库文件 编译文件等等 a 只跟踪c文件和h文件的版本 实现一个大的多层文件夹中的 c和 h文件 能够更新 b 建立分支 分别对各个工程进行操作 proje
  • 如何使用指向类的成员函数的指针(详解!)

    我们首先复习一下 指向函数的指针 如何使用 void print void pfun 声明一个指向函数的指针 函数的参数是 void 函数的返回值是 void pfun print 赋值一个指向函数的指针 pfun 使用一个指向函数的指针
  • vue tab切换

  • Dicom 医学图像与 nii 标签数据处理

    Dicom 医学图像与 nii 标签数据处理 Dicom医学图像处理 nii标记数据处理 综合数据处理 1 code1 2 需要说明 3 code2 Dicom医学图像处理 reference https blog csdn net u01
  • 【Linux】传输层协议 — TCP协议

    Linux 博客主页 一起去看日落吗 分享博主的在Linux中学习到的知识和遇到的问题 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 看似不起波澜的日复一日 一定会在某一天让你看见坚持的意义 祝我们都能在鸡零狗碎里找
  • 【k8s】kube-proxy 工作模式

    文章目录 Userspace模式 iptables模式 负载均衡 Load Balancing LB 轮询 Round Robin SessionAffinity 最少连接 Least Connection IP哈希 IP Hash Ses
  • 升级AGP 7.x以后,引入带冒号‘:‘的插件规则

    升级到AGP7 x后 插件的使用规则有变化 插件id只支持 点 下划线 中划线 三种特殊字符 对于包含 的插件 比如 com alibaba arouter register 1 0 2 在plugins闭包中使用 编译报错 plugin
  • cmd进入mysql及常用的mysql操作

    cmd进入mysql操作 win R 输入cmd 打开cmd窗口 进入到 mysql bin目录的路径下 第一步 启动mysql服务 可以通过 net start myql 命令实现 第二步 先使用DOS命令进入mysql的安装目录下的bi
  • PCB对点之Mark点检测

    一 Mark点的作用 Mark点是电路板设计中PCB应用于自动贴片机上的位置识别点 Mark点标记可以是裸铜 清澈的防氧化涂层保护的裸铜 PCB板Mark点也叫基准点 为表面贴装工艺中的所有步骤提供共同的可测量点 保证了SMT设备能精确的定
  • 【MySQL】如何导入SQL数据库

    目录 如何导入SQL数据库 例子1 以Terminal终端命令行导入 例子2 以SQLyog图形化软件导入 如何导入SQL数据库 如何将现成的数据库导入到MySQL中 有两种方式 通过终端命令行语句导入 mysql gt source SQ
  • 51单片机入学第五课——蜂鸣器的原理与应用

    文章目录 三极管 三极管的应用 三极管工作原理 PNP型 NPN型 蜂鸣器工作原理 电路分析 编程实践 总结 三极管 三极管两种封装方式 三极管的应用 三极管 全称应为半导体三极管 也称双极型晶体管 晶体三极管 是一种控制电流的半导体器件
  • cookie记录了服务器相关的信息,使用cookie记录信息(精选).ppt

    文档介绍 第6章使用cookie记录信息 1 6 1 1 什么是cookie 什么是Cookies 小甜饼 Cookies就是服务器暂存放在你的电脑里的资料 txt格式的文本文件 好让服务器用来辨认你的计算机 当浏览网站的时候 Web服务器
  • DDR3 关键时间参数

    1 传输速率 比如 1066MT S 1600MT S 1866MT S 等 这个是首要考虑的 因为这个决定了 DDR3 内存的最高传输速率 2 tRCD 参数 tRCD 全称是 RAS to CAS Delay 也就是行寻址到列寻址之间的
  • 《Learning Spark》第十一章:Spark(MLlib)与机器学习

    2020 07 06 引言 我一直以为这部分内容 其实没有什么大不了的 反正就是弄出来数据 然后跑算法就完事了嘛 但是仔细读了读这小节 发现了一些不一样的地方 这里来列举一下 我读完这个章节之后的一些想法 然后再具体来记录这部分的主要内容
  • 计算机组成原理 总线与微命令实验

    总线与微命令实验 实验环境 计算机组成原理实验环境 实验目的 理解总线的概念和作用 连接运算器与存储器 熟悉计算机的数据通路 理解微命令与微操作的概念 实验要求 做好实验预习 读懂实验电路图 熟悉实验元器件的功能特性和使用方法 按照实验内容
  • 手把手教你阅读开源代码【附Python开源项目包】

    文末领取 Python开源项目包 1 为什么要阅读开源代码 阅读 Python 开源项目代码主要有如下三个原因 在工作过程中遇到一些问题 Google 和 StackOverFlow 等网站找不到解决办法 只能去翻源码 对某些项目或者方向非