1989 年圣诞节假期,荷兰程序员吉多·范罗苏姆(Guido van Rossum)觉得无聊,决定做一个他构思已久的小项目:一门新的脚本语言,作为 ABC 语言的继承者,但修正他认为 ABC 的所有失误。
他没有预料到,这个圣诞节的消遣项目,三十多年后会成为世界上使用最广泛的编程语言之一——从大学编程课到机器学习研究,从自动化脚本到 NASA 火箭控制,无处不在。
破除误解:Python 不是一门"慢而简单"的玩具语言
长期以来,Python 被系统程序员视为"脚本语言"或"胶水语言"——适合把其他程序拼接起来的工具,但太慢、太不严格,不适合严肃的计算任务。
这个印象在 2012 年之后被彻底颠覆。深度学习的崛起让 Python 成为了 AI/ML 领域的首选语言——TensorFlow、PyTorch、scikit-learn、NumPy 都是 Python 的核心库。Python 的"慢"通过 NumPy 的向量化(底层 Fortran/C)、GPU 计算(CUDA)和 Cython 等方式完全规避:慢的是 Python 解释器,而不是运行在 Python 调用链下的 C/Fortran 代码。
现场:ABC 的遗产与 Python 的诞生
范罗苏姆 1956 年 1 月 31 日出生于荷兰海牙,1982 年在阿姆斯特丹大学获数学与计算机科学硕士学位。此后他在 CWI(荷兰数学与计算机科学研究中心)工作,加入了 ABC 语言的实现团队。
ABC 是 CWI 的一个研究小组设计的、面向初学者的交互式语言:内置列表、表格等高层数据类型,用缩进表达代码块,力求让程序读起来像自然的指令。范罗苏姆在 ABC 的实现上投入了数年,近距离看到了它的力量与死因——ABC 是一个封闭的完美世界:没有扩展接口,无法调用操作系统功能,不能接入其他语言写的库。一门语言再优雅,只要不能与现实世界的文件、网络和设备对话,就只能停留在教学演示里。这个教训后来直接塑造了 Python 的两个核心决策:必须能用 C 写扩展模块,必须能直接调用 Unix 系统接口。
1989 年,范罗苏姆开始写 Python。当时他正参与 CWI 的 Amoeba 分布式操作系统项目,需要一门比 shell 更强、又比 C 轻便的语言来做系统管理——Python 就是为这个缝隙设计的。核心目标是: 1. 可读性优先:代码应该像伪代码一样清晰 2. 可扩展:允许用 C 写扩展模块,并能直接调用 Unix 系统接口 3. 异常处理:明确的错误报告,而非静默失败
1991 年 2 月,范罗苏姆把 Python 0.9.0 的源代码发布到 USENET 的 alt.sources 新闻组。这个最早的公开版本已经包含了带继承的类、结构化异常处理、函数,以及列表、字典等核心数据类型——Python 的基因在第一个版本里就已齐备。语言的名字来自 BBC 喜剧《蒙提·派森的飞翔马戏团》(Monty Python's Flying Circus),而非蛇——但蛇作为视觉形象被广泛采用,范罗苏姆本人不反对。
Python 的核心设计决策
强制缩进:这个决策直接继承自 ABC。Python 用缩进表示代码块,而非花括号或 end 关键字。这是 Python 最有争议的设计之一,也是 Python 可读性的最重要来源。"代码必须看起来像它运行的方式"是范罗苏姆的核心审美。机制收益是具体的:在其他语言里,缩进只是装饰,错误的缩进会误导读者而编译器不报警;在 Python 里,视觉结构与语法结构被强制合一,"看起来的样子"与"运行的样子"之间不再可能错位,一整类缩进欺骗性的 bug 被彻底消除。
动态类型:Python 是动态类型语言——变量不需要声明类型,类型检查在运行时进行。这降低了入门门槛,但大型项目中的类型错误只能在运行时被发现。Python 3.5(2015)引入了类型提示(Type Hints),配合 mypy 等工具可以做静态分析,但仍是可选的。
"一种最佳做法"(One Obvious Way):Python 的设计哲学(写在 PEP 20《Python 之禅》中)强调,对于每个问题,应该有且只有一种显而易见的做法。这与 Perl 的"条条大路通罗马"的哲学相对。这一原则在语言生态和标准库设计上都有体现——Python 的标准库("batteries included")覆盖了大量常见任务,减少了对外部库的依赖。
鸭子类型(Duck Typing):"如果它走路像鸭子,叫声像鸭子,那它就是鸭子。"Python 不要求对象实现特定接口或继承特定基类,只要对象有所需的方法,就可以被使用。这种灵活性是 Python 在科学计算和快速原型中的核心优势。
错误处理作为一等公民:这同样是对 ABC 的修正。ABC 追求"无错误",试图让初学者永不犯错;范罗苏姆的选择相反——错误一定会发生,语言要做的是让错误明确地发生:抛出异常、携带信息、可以被捕获和处理,而不是静默地产出错误结果。《Python 之禅》里"显式优于隐式"的格言,在错误处理上体现得最彻底。
BDFL 与退位
范罗苏姆长期以"仁慈的独裁者"(Benevolent Dictator For Life,BDFL)的身份主导 Python 的设计决策——PEP(Python Enhancement Proposals,Python 改进提案)机制让社区提案,但最终决定权在范罗苏姆手中。这个机制的巧妙之处在于把提案权完全开放、把否决权高度集中:任何人都可以写 PEP、在邮件列表公开辩论,而社区不必因众口难调而失去方向。他裁决时反复使用的标准只有一条:"这够不够 Pythonic"——一个无法写成规范、却维系了近三十年内部一致性的审美判断。
2018 年,一场关于 PEP 572(海象运算符 :=)的激烈争论耗尽了他的精力。争论本身并不极端,但他感受到无论自己做任何决定都会引来指责。2018 年 7 月,他在邮件列表发出题为《Transfer of Power》的邮件,宣布"永久退位",辞去 BDFL 角色。他后来回忆,真正耗尽他的不是争论的激烈,而是"无论怎么决定都会被指责"的绝望感。社区随后经历了一场认真的治理实验:多个治理方案(PEP 8000 系列)被摆上台面逐一表决,最终 PEP 13 确立的"指导委员会"(Steering Council)模式胜出——五名民选成员拥有最终裁决权,但权力被程序严格约束。
职业生涯方面,范罗苏姆 2012 年底离开 Google 加入 Dropbox,2019 年 10 月宣布退休;退休只维持了一年,2020 年 11 月他加入微软开发者部门,主导 Faster CPython 项目,致力于提升 CPython 解释器的性能。
Python 的生态成就
- 科学计算:NumPy(1995 年前身 Numeric),SciPy,Matplotlib 构成了科学 Python 的基础,让 Python 取代 MATLAB 成为数值计算的首选。
- AI/ML:TensorFlow(Google,2015)、PyTorch(Meta,2016)把深度学习框架建立在 Python 之上,反过来把 Python 推向了 AI 时代的中心。
- Web 框架:Django、Flask 让 Python 成为 Web 后端开发的主流选择之一。
- 教育:TIOBE 指数显示 Python 长期位居最流行语言前三,是全球大学编程入门课中使用最广泛的语言之一。
代价与争议
Python 2 到 3 的迁移:Python 3(2008)引入了不向后兼容的改动(print 函数、字符串 Unicode、整数除法等),导致了长达十年的分裂——Python 2 直到 2020 年才正式终止支持。这场迁移是软件工程历史上最大规模的"语言版本分裂"之一,也被认为是 BDFL 模式在跨越式改进时的局限性体现。
GIL(全局解释器锁):CPython(Python 的参考实现)有一个 GIL,使得 Python 多线程无法真正并行运行 CPU 密集型任务。这是 Python 在多核利用率上的根本短板。Python 3.13(2024)开始提供实验性的"无 GIL 模式",但完整生态兼容性仍需时日。
性能:Python 的解释器比编译型语言慢一到两个数量级。对大多数任务这不是问题,但对性能关键代码仍是瓶颈。Microsoft 的 Faster CPython 项目(范罗苏姆参与)目标是在数个版本内实现 CPython 两倍性能提升,Python 3.11 已实现约 25% 的加速。技术路线来自马克·香农(Mark Shannon)2021 年提出的方案:不重写解释器,而是让它自适应专门化(PEP 659)——字节码在运行中观察实际出现的类型,把通用指令原地替换为针对该类型的快速版本,遇到类型变化再退回通用版本。这条路线的聪明之处在于不改变语言语义,纯吃实现层的红利。
跨域连接
- 正当性:终身仁慈独裁者制度用"一个可预期的裁决者"换取一致性,它的正当性来自结果而非程序,因此在争议足够大时必然失效——退位不是被推翻,而是裁决者发现无论怎么裁都会被指责,个人成本超过了收益。换成委员会后决策更慢但更稳,这正是把正当性从人格搬到程序上要付的价钱。
- 心理语言学加工:代码被读的次数远多于被写,而理解成本随需要同时保持的上下文项数增长。强制缩进把块结构编码进视觉布局,层次不必再靠括号在脑内配对。要点是它并没有让程序变简单,只是把结构挪到了更容易被读出的通道上——降低的是加工负荷,不是语义复杂度。
- 博弈论基础:跨大版本迁移是一个协调问题:只有足够多的库先迁移,应用才愿意迁移,反之亦然,两个均衡都稳定。所以打破僵局的不是技术优势,而是一个外生日期——宣布终止支持之所以有效,是因为它改变了"留在旧版"的收益,而不是改变了新版有多好。
- 社会语言学变异:自然语言里同义表达并存是常态,规范化要靠权威机构与教育持续压制变体。这门语言用文化而非语法禁止变体,约束力因此依赖社群共识,并随社群扩大而稀释。可检验的后果已经发生:语言越流行,风格分歧越大,于是必须用格式化工具与静态检查把规范重新机械化。
- 类型系统:类型提示是可选的,也不改变运行时语义,只在外部工具里生效。这条设计让静态检查可以增量引入,代价是类型信息无法用于优化。推论跟着走:渐进类型系统的收益上限由"多少代码已被标注"决定,而不是由类型系统本身的表达力决定。
人物小记:BDFL 之后
范罗苏姆 2018 年退位 BDFL 后曾短暂"退休",自称"永久假期"(permanent vacation)。但仅六个月后他就宣布加入 Dropbox,之后又加入 Microsoft——他坦言退休让他"太无聊了"。
他在接受采访时描述自己的工作方式:早上不看邮件,先写代码两到三小时,然后再处理沟通事务。这个习惯帮助他在三十年里保持了对细节的直接掌控。
Python 社区在他担任 BDFL 的年代形成了一种独特文化:尊重但不盲从,每个人都可以提 PEP,每个 PEP 都可能被"仁慈的独裁者"以"这不 Pythonic"为由拒绝。范罗苏姆退位后,Python Steering Council 的决策更民主,但批评者认为失去了内部一致性。2019 年的 PEP 594(移除电池仓中的一批旧库)历时五年讨论,比 BDFL 时代的任何决策都费时得多。
参考文献
- van Rossum, G. Python Reference Manual. CWI Report CS-R9525, 1995.(早期官方参考手册)
- Peters, T. The Zen of Python. PEP 20, 2004.(python.org 上
import this输出的 19 条格言,简洁描述 Python 设计哲学) - van Rossum, G. The History of Python. 个人博客系列文章,2009.(本人回顾 Python 的早期设计决策)
- PEP 13: Python Language Governance. python.org, 2019.(BDFL 退位后的治理框架)
延伸阅读
- Slatkin, B. Effective Python. 2nd ed., Addison-Wesley, 2020.(现代 Python 最佳实践)
- Ramalho, L. Fluent Python. 2nd ed., O'Reilly, 2022.(Python 进阶实践,深入语言特性)
- Guido van Rossum. Brief Bio and FAQ. gvanrossum.github.io.