为什么要钻研Python源码

大家好,我是 fasionchan ,资深 Python 工程师,曾就职于 腾讯网易游戏蚂蚁金服 等互联网公司。

经过多年的摸爬滚打,我对 Python 开发有一些自己的体会,深知源码研究的意义。 我就职于网易游戏时,曾在内部开展 Python源码剖析 系列技术分享,收获颇多。

此外,我从 2014 年便开始参与公司技术人才的招聘工作,经常在面试中考察候选人对 Python 内部原理的理解,发现源码是区分度较大的话题之一。 我见过不少候选人底层功底薄弱,知其然而不知其所以然,因而与工作机会无缘,非常可惜。

随着人工智能等技术的兴起,Python 正风靡世界! 最新的 TIOBE 编程语言排行榜上,Python 已经稳居前 3 位! 正如硬币的两面,这对 Python 工程师来说既意味着 机遇 ,也带来一些 挑战

一方面,采用 Python 技术栈的公司越来越多,掌握 Python 的工程师不愁没有工作机会。 另一方面,大量的工程师浩浩荡荡加入 Python 大军,竞争日益激烈。 如果你想要从众人中脱颖而出,就必须拿出自己的看家本领。

不少初学者觉得,能用 Python 完成开发需求就行了,没必要深入学习。 这个观点是非常错误的,掌握语法只是万里长征第一步。程序能跑起来,并不意味着程序能高效地运行,实际上这两者有天壤之别。 制约程序效率的因素很多,语言特性、运行机制、算法原理、操作系统环境等等,只掌握皮毛显然无法驾驭这些。

我见过不少初级工程师,开发出来的程序逻辑上没有问题,但是性能低下。 程序上线就承受巨大压力,甚至引发性能故障,严重影响个人业绩。 归根到底,还是在底层原理上吃亏。 不管学习什么技术,浅尝辄止肯定是不行的。 因此,要么满足于 Python 语法,沦为 API 调用侠; 要么,彻底掌握 Python 的内部原理。

研究过源码的我,深知这其中的艰辛——成千上万行代码,多少个日日夜夜以及笔记本里的一个个草图…… 如果能够将心得分享出来,相信对后来者会有所帮助。 因此,当慕课网的老师跟我沟通时,我们一拍即合。

那么,这个专栏都介绍些什么内容呢?

第一部分, 开篇 。 讨论源码学习对提升开发能力的重要意义,结合“小菜”的经历介绍 Python 工程师的成长历程。

第二部分, 对象模型 。 介绍 Python 面向对象理论体系,明确“ ”和“ 对象 ”在 Python 中的表现形式。 通过源码,分析对象的 内存布局 ,研究对象的 生命周期 ,初步揭开对象的面纱。

第三部分, 内建对象 。 涵盖 floatintbytesstrlistdict 等内建对象的实现细节,重点突出每种对象的 数据结构 以及背后的 算法思想 ,并结合 工程实践 讲解内建对象的 妙用

第四部分, 虚拟机 。 先介绍 Python 程序的执行过程以及 字节码 的结构; 然后介绍 Python 虚拟机 的运行机制,以及 名字空间 等运行时上下文; 最后讲解 GIL 全局锁 对虚拟机的影响并探索应对之策。

第五部分, 函数机制 。 探索函数从 代码 转化成函数 对象 的所有步骤,并以 Python 代码模仿这个过程。 重点讲解 嵌套函数闭包 以及 装饰器 这些面试必问概念,并结合工程实践介绍 函数式编程装饰器 的高级用法。

第六部分, 类机制 。 探索类从 代码 转化为 对象进而创建 实例 对象的所有步骤,并以 Python 代码进行模拟。 重点讲解 继承机制属性查找 等高频面试知识点,以及 魔术方法元类 在程序开发中的妙用。

第七部分, 生成器与协程 。 讨论 生成器 的高级用法,并以 字节码 讲解它的运行原理。 基于 生成器 ,动手设计一个协程库,加深对协程运行机制的理解。 结合工程实践,讲解用 asyncio 构建 高并发应用 的技巧。

第八部分, 内存管理机制 。 结合 Python 特色全面讲解 内存池引用计数标记删除分代回收 等关键技术。 理论联系实际,以一个真实案例介绍工程实践中排查并解决 内存泄露 问题的方法论。

第九部分, 总结 。 回顾专栏内容,在读懂 Python 基础上,追求有 Python 格调 的代码设计技巧。

那学习本专栏学要具备哪些基础知识呢?

基本的 Python 开发能力是必须的,不需要特别深入,能独立编写程序即可。 有一定的 C 语言基础更好,没有也不打紧。 专栏从最简单的源码入手,逐步深入,并在必要地方补充介绍相关 C 语言知识。 大家不必恐惧 C 语言,专栏精心编排,并不拘泥于繁缛的代码细节,总体通俗易懂。

此外,专栏附带大量的图表,详尽地描绘了 Python 内部各种数据结构间的关系。 例如,list 对象的内部结构图:

相信在这些图表的帮助下,你可以轻松地理解原本很深奥的源码。 虽然绘制这些图表花了我大量的时间,但这一切都是值得的。 希望我一个人的时间付出,能帮更多的人节约学习时间,起到事半功倍的效果。 诚如是,则不胜荣幸!

著名技术作家侯捷在《STL源码剖析》中说过:源码之前,了无秘密。 源码就像武功秘籍,虽然有时难懂如天书;可一旦参透,便掌握绝世武功的奥妙! 感恩学生时代花了无数日夜苦读《STL源码剖析》的自己!

源码之前,了无秘密!与诸君共勉!

洞悉 Python 虚拟机运行机制,探索高效程序设计之道!

到底如何才能提升我的 Python 开发水平,向更高一级的岗位迈进呢? 如果你有这些问题或者疑惑,请订阅我们的专栏 Python源码深度剖析 ,阅读更多章节:

【Python源码剖析】系列文章首发于公众号【小菜学编程】,敬请关注: