!NOTE\] 笔记说明 在这个系列笔记中,我将陆续整理自己在学习 Python 这门编程语言过程中所累积的心得与体会,它们将被存储在我个人的[计算机学习笔记库](https://github.com/owlman/CS_Studynotes)中,并予以长期维护。
语言的来历与版本历史
1989 年的圣诞节期间,时任荷兰数学和计算机科学研究学会(CWI)研究员的 Guido van Rossum[[1]](#[1]) 决定基于 ABC 语言设计并实现一门新的脚本编程语言,最初目的是用于替代 Unix shell 和部分 C 程序,以承担 Amoeba 分布式操作系统[[2]](#[2])中的系统管理、异常处理与交互任务。由于 Guido 本人是 BBC 电视剧《Monty Python 的飞行马戏团》(Monty Python's Flying Circus)的爱好者,这门语言最终被命名为 Python。
自 Python 项目创建以来,Guido van Rossum 长期担任该语言的主要设计者与决策者,并以 Python 社区公认的"终身仁慈独裁者"(Benevolent Dictator For Life,简称 BDFL)身份主导该语言的发展方向。2018 年 7 月 12 日,Guido 宣布从 BDFL 职位上"永久休假"。然后从 2018 年开始,Python 项目不再由单一的 BDFL 主导,而是由治理委员会(Steering Council)进行集体决策。治理委员会成员由社区定期选举产生,负责在各自任期内引导 Python 语言的整体发展方向。
下面,让我们按时间顺序来简要回顾一下 Python 的主要版本演进历程。
-
1991 年 2 月 ,Guido van Rossum 在 Usenet 新闻组 alt.sources 上发布了 Python 的最初实现(版本号为 0.9.0)。该版本已经支持类(含继承机制)、异常处理、函数定义,以及
list、dict、str等核心内置数据类型。1994 年 1 月 ,Python 1.0 发布,引入了
lambda、map、filter和reduce等函数式编程特性。随后,Python 1.1 增加了参数默认值,Python 1.3 引入了关键字参数,Python 1.4 则加入了对复数类型的内置支持。 -
2000 年 10 月,Python 2.0 发布,引入了受函数式编程语言影响的列表推导式。Python 2.1 支持了静态嵌套作用域。Python 2.2 对对象模型进行了重大重构,将用 C 实现的内置类型与用 Python 实现的类统一为一致的对象体系,同时引入了迭代器、生成器以及描述器协议。随后,Python 2.3 加入了源自 Dylan 的方法解析顺序(MRO),Python 2.4 引入了集合类型与函数修饰器,Python 2.5 在官方实现中加入了抽象语法树支持。
-
2008 年 12 月 ,Python 3.0 发布。该版本对语言进行了大规模修订,因而无法与 Python 2 系列保持完全向后兼容。尽管官方提供了
2to3自动转换工具,但大量既有代码仍难以迁移,因此 Python 2.7 的生命周期被多次延长,最终于2020 年 1 月 1 日正式结束支持。在 Python 3 系列中,Python 3.4 引入了异步 I/O 框架,Python 3.5 增加了类型提示(Type Hints)以及基于
async/await语法的协程支持,Python 3.8 引入了赋值表达式(海象运算符)。 -
2020 年 10 月 ,Python 3.9 发布,引入了针对容器类型的泛化别名(
types.GenericAlias),并在官方实现中逐步替换了旧的语法解析器。Python 3.10 加入了结构化模式匹配(借鉴自 Haskell、OCaml 等语言)以及内置的联合类型(types.UnionType)。Python 3.11 对解释器执行性能进行了大幅优化。Python 3.12 引入了类型参数语法,并移除了或废弃了一批历史遗留模块与功能。 -
2024 年 10 月,Python 3.13 发布,引入了多项实验性改进,包括可选的无全局解释器锁(free-threaded)构建方式、解释器内部结构的进一步重构,以及对交互体验和执行性能的探索性优化。
Python 3.14在此基础上继续推进无 GIL 解释器的官方支持,将其作为受支持的可选构建形态之一,但默认构建仍保留传统的 GIL 机制,以确保生态系统的兼容性与稳定性。
按照官方生命周期策略,每个 Python 版本在发布后通常会经历一段以缺陷修复(bugfix)为主的活跃维护期,随后进入以安全修复(security fixes)为主的长期支持阶段,整个生命周期一般持续约五年。
语言特质及其适用领域
如果仔细回顾一下近年来由人工智能技术所带来的这波热潮,我们就不难发现一个有趣的现象:当 DeepMind 的 AlphaGo 击败人类围棋冠军时,该应用中的系统集成与算法协调的角色主要是由 Python 来承担的;当 DeepSeek、ChatGPT 等 NLP 应用推动智能助手革命时,Python 也是其基础训练框架(例如 PyTorch、TensorFlow)的实现语言。根据 2023 年 IEEE Spectrum 编程语言排行榜,Python 已连年蝉联榜首。在我个人看来,该语言在 Ai 时代的这种强大统治力主要源于它的以下特质。
贴近人类思维的表达能力
诚如大家所知,Python 是当前在程序设计领域中最为热门的、解释型的高级编程语言之一。它支持函数式、指令式、结构化和面向对象编程等多种编程范型,且拥有强大的动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。这些特性可以帮助使用这门编程语言的程序员在参与各种规模的项目时编写出思路清晰的、合乎逻辑的代码。在使用 Python 编写代码时,开发者们通常会遵循"优雅、明确、简单"的核心准则,具体来说就是:
优美优于丑陋。明了优于隐晦。
简单优于复杂。复杂优于凌乱。
扁平优于嵌套。稀疏优于稠密。
可读性很重要。[[3]](#[3])
譬如,从下面与 Java 这类传统编程语言的语法比较中,读者应该可以体会到 Python 语言有着更贴近自然语言的表达方式,这有助于开发者们在执行编程任务时将注意力聚焦于表达计算思维本身,而不是纠结于各种语法细节。
```python
# Java 的语法:
for(int i=0; i<10; i++) {
System.out.println(i);
}
# Python 的语法:
for i in range(10):
print(i)
```
在科学计算领域的完善生态
关于 Python 语言在科学计算领域所建立的"完善生态",我们可以分全栈式的完备工具链、跨语言生态的集成能力、跨学科生态的渗透能力、以及开源社区的强大凝聚力等几个不同的方面来进行介绍。
-
全栈式的完备工具链:Python 以 NumPy(高性能多维数组)、SciPy(科学算法集成)和 Matplotlib(可视化)三大核心扩展库为基石,构建了覆盖数值计算、统计分析、机器学习、图像处理等全栈式的工具链生态。例如,SciPy 库中内置的 100 多种概率分布函数,可直接替代 MATLAB 来完成类似疫情传播建模这样的复杂分析任务,而 PyTorch/TensorFlow 等框架则依托 Python 接口成为 AI 训练的行业标准。
-
跨语言生态的集成能力:在 Python 开发环境中,我们会借助 Cython/f2py 等技术来无缝集成基于 Fortran/C++ 等语言构建的底层数学库(如BLAS/LAPACK),以便将计算密集型任务转移至编译语言执行,既保留开发效率又规避性能短板。这种"前端 Python + 后端 C"的模式,使开发者无需深入底层即可调用数十年积累的高性能代码,形成生态护城河。
-
跨学科生态的雪球效应:正如之前所说,Python 在 IEEE Spectrum 榜单中连年占据首位,如今已成为科学界撰写学术论文时默认工具之一。天文学、物理学期刊中 Python 代码占比显着提升,其简洁语法降低了非计算机专业研究者的使用门槛。而且,从金融量化(取代 R/MATLAB)到生物信息学,Python 的通用性促使其库生态滚雪球式扩张,例如 Pandas 在工程化数据处理、与 Python 生态的集成以及生产环境部署方面具有显著优势,而 scikit-learn 则大幅降低了传统机器学习方法的工程应用门槛。
-
社区驱动的自我强化:截止到目前,Python 的开源生态已经催生了近 50 万个的 PyPI项目(其2024年的官方数据),形成"需求-开发-反馈"闭环。例如,借助 CUDA Python 和 PyTorch/RAPIDS/CuPy 等扩展库,我们可以实现从高层 API 到 GPU 内核开发的平滑过渡,满足不同层级开发者需求。这种生态活力也让 Fortran 等传统科学语言因工程化开发效率不高而逐渐式微。
总而言之,Python 基于开发效率与执行性能的平衡策略,将科学计算从孤立工具(如 MATLAB)转变为可嵌入 Web、云计算、AI 工作流的"基础语言",最终成为多学科交叉创新的最大公约数。在更为强大的 AI 应用即将来临之际,人类的核心价值在于"创造机器不可替代的创造力"。这本教材所要传授给读者的不仅是语法知识,更是以下三种程序员的未来素养:
- 计算思维:将混沌问题分解为可执行逻辑的能力。
- 算法直觉:洞察问题本质的建模智慧。
- 数字伦理:技术向善的价值罗盘。
而且,除了基本语法之外,一个 Python 开发者的能力实际上就取决于如何根据自己面对的问题找到适用的框架,并在合理的时间内掌握该框架的使用方法,并用它快速地构建自己的项目。从这方面来说的话,该语言目前活跃的主要应用领域如下所示:
- GUI 应用:在这一领域,我们可以选择引入 PyQT、WxPython 等框架来开发 GUI 应用。
- Web 应用:在这一领域,我们可以选择引入 Django、Web2py、Bottle、Tornado、Flask 等框架来开发个人博客、线上论坛等 Web 应用程序以及基于 HTTP 协议的应用程序服务端;
- 网络编程:在这一领域,我们可以选择引入 Twisted 框架来开发基于多种网络协议的应用程序,该框架支持的协议既包括 UDP、TCP、TLS 等传输层协议,也包括 HTTP、FTP 等应用层协议;
- 网络爬虫:在这一领域,我们可以选择引入 Scrapy 这个轻量级的框架来从指定的网站中收集有用的数据;
- 科学计算:在这一领域,我们可以选择引入 Numpy、Scipy、pandas、matplotlib 等框架进行各种科学数值计算,并生成相关的数据报告或图表;
- 人工智能:在这一领域,我们可以选择引入 PyTorch、NLTK、tensorflow 等框架来数据挖掘、自然语言处理、机器学习等方向上的工作;
- 图形化游戏:在这一领域,我们可以选择引入 PyGame、PyOgre、Panda3D 等框架来开发俄罗斯方块、贪吃蛇这样的二维或三维的图形化游戏。
- CI/CD 自动化:在这一领域,我们可以选择引入 Buildbot 框架来实现自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果;
- 自动化测试:在这一领域,我们可以选择引入 PyTest、Playwright、Selenium、Robot 等扩展库和框架来实现自动化的 UI 测试、接口测试、兼容性测试等;
学习路线图规划
在了解 Python 语言的基本情况之后,接下来就可以来具体规划一下要如何学习这门语言的学习路线图了。大致上,我们可以将路线图划分为以下三个里程碑来进行。
能搭建属于自己的编程环境
这一里程碑主要聚焦的是编程环境的搭建能力。具体到 Python 语言来说,编程环境包括我们使用这门编程语言时所基于的操作系统、语言运行时环境,以及编写代码所要使用的编辑器(或集成开发环境,即 IDE)。总而言之,所谓的"工欲善其事,必先利其器",想要学好编程语言,首先必须学会从零开始搭建自己的编程环境。
参考书目:
关联笔记:[[编程环境配置|Python 学习笔记:编程环境配置]] 博客园链接
掌握编程语言的基础语法
这一里程碑主要聚焦的是基于编程语言的表达能力。编程语言归根结底是一种用于表达人类思维,并让计算机执行的工具,所以首先要做的就是掌握这门编程语言的基础语法以及它的标准库。然后,再初步了解如何使用这门语言实现一些基本的算法,完成一些基本的编程任务。
参考书目:
关联笔记:[[基础语法学习|Python 学习笔记:基础语法学习]] 博客园链接
能快速进入具体的项目开发
这一里程碑主要聚焦的是面向具体开发需求的可持续学习能力。众所周知,基于"不重复发明轮子"的基本原则,如今大部分的应用程序开发项目都是基于现有的第三方扩展(库和框架)来进行的,所以,面向具体的开发需求,我们的可持续学习能力实际上就是快速了解并掌握某个第三方扩展的能力。
然而,在如今的 Python 社区中,第三方扩展的数量早已超过了 50 万个,而且还在不断增长。即使是面对某一具体的开发需求,它们也不仅琳琅满目,选择众多,而且新陈代谢还极为快速。这意味着,即使我们用一本书介绍了当前在面向某一具体开发需求时最为流行的第三方扩展及其使用方法,这些内容很有可能还没等到书出版就已经成了昨日黄花。所以,我们真正的学习目的应该是掌握"快速上手"的能力,这需要学习如何阅读这些扩展本身提供给开发者的官方文档和源代码,自行去了解它们的设计思路。从某种程度上来说,这也需要我们自己具备开发类似扩展的能力,一个优秀的工程师或设计师虽然不必重复发明轮子,但应该要能了解轮子是如何被发明的,这样才能清楚在怎么样的轮子上应该构建怎么样的车,以免闭门造车。
关联笔记:[[具体项目实践|Python 学习笔记:具体项目实践]] 博客园链接
总而言之,对于如今的软件工程师来说,在一个月内快速掌握某个新框架的能力远比之前已经掌握了多少个框架重要得多,例如当开发团队的管理员在面试新成员时,如果这位面试者有五年 A 框架的使用经验,那固然是很好,但团队中很多人都有,未必需要再多一个同类型的人才、但如果该面试者能在一个礼拜快速上手基于 Python 的任意一种第三方扩展,那么这位人才的重要性就会被凸显出来。
-
吉多·范罗苏姆(荷兰语:Guido van Rossum,1956年1月31日---),生于荷兰哈勒姆,计算机程序员,为 Python 程序设计语言的最初设计者及主要架构师。关于他的生平事迹,读者可以参考维基百科中的相关词条。 ↩︎
-
Amoeba 是由阿姆斯特丹自由大学的 Andrew S. Tanenbaum 等人开发的分布式作系统 。Amoeba 项目的目标是构建一个分时系统,使整个计算机网络在用户眼中看起来像是一台机器。关于该系统的详细信息,读者可以参考维基百科中的相关词条。 ↩︎
-
这些准则出自《the Zen of Python》一文。 ↩︎