引言
如果你是一名 Python 开发者,你可能已经无数次地在代码中写下 spam = 1 或 eggs = 'hello',却从未想过这些看似普通的变量名背后隐藏着半个多世纪的喜剧遗产。Python 编程语言与 Monty Python 喜剧团体的联系,远不止于名字本身——它渗透在语言的命名哲学、文档惯例、社区文化乃至整个生态系统中。本文将系统梳理这两者之间千丝万缕的联系。
一、Python 命名与 Monty Python 梗的联系全景
graph TD
A[Python编程语言] --> B[命名来源:Monty Python's Flying Circus]
A --> C[IDE名称:IDLE]
A --> D[文档惯例:spam & eggs]
A --> E[社区文化:Pythonic幽默]
A --> F[生态工具:Cheese Shop / PyPI]
B --> B1[Guido van Rossum<br/>1989年圣诞假期创作]
B --> B2[反叛传统命名<br/>拒绝FORTRAN/COBOL式缩写]
B --> B3[追求短、独特<br/>略带神秘感的名字]
C --> C1[官方全称:Integrated<br/>DeveLopment Environment]
C --> C2[致敬Eric Idle<br/>Monty Python成员]
C --> C3[eric IDE<br/>双重致敬]
D --> D1[替代传统foo/bar<br/>使用spam/eggs]
D --> D2[官方教程示例]
D --> D3[Google Style Guide<br/>文档示例]
D --> D4[python-docx库<br/>monty-truth.png]
E --> E1[The Zen of Python<br/>哲学美学]
E --> E2[Batteries Included<br/>内置丰富]
E --> E3[PyCon会议<br/>Monty Python引用]
F --> F1[Cheese Shop<br/>原PyPI名称]
F --> F2[Python Eggs<br/>打包格式]
F --> F3[Python Wheels<br/>打包格式]
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#bbf,stroke:#333
style C fill:#bfb,stroke:#333
style D fill:#fbb,stroke:#333
style E fill:#ffb,stroke:#333
style F fill:#cff,stroke:#333
二、Python 的命名:不是蛇,是喜剧
1. Guido van Rossum 的圣诞假期项目
1989年圣诞节期间,荷兰程序员 Guido van Rossum 在荷兰国家数学和计算机科学研究中心(CWI)工作。当时他正在开发 Amoeba 分布式操作系统,需要一种介于 Shell 脚本和 C 语言之间的脚本语言。找不到合适的工具,他决定自己动手创造一门新语言。
在命名这门语言时,Guido 正在阅读 Monty Python’s Flying Circus 的剧本。作为一个狂热的 Monty Python 粉丝,他需要一个“短、独特、略带神秘感”的名字。当时 Amoeba 项目团队有以电视节目命名工具的习惯,而“Python”恰好满足所有条件。
2. 对传统编程语言命名哲学的反叛
在 Python 诞生之前,主流编程语言的命名遵循着严格的“技术传统”:
| 语言 | 命名来源 | 命名逻辑 |
|---|---|---|
| FORTRAN | Formula Translation | 技术缩写 |
| COBOL | Common Business Oriented Language | 技术缩写 |
| ALGOL | Algorithmic Language | 技术缩写 |
| Pascal | Blaise Pascal(数学家) | 历史人物 |
| Ada | Ada Lovelace(数学家) | 历史人物 |
| Java | Java 咖啡 | 产品隐喻 |
Python 打破了这一切。它是唯一一门以纯娱乐价值命名的主流编程语言。Guido 明确表示,这是对“自命不凡的命名惯例”的反叛——他选择幽默而非严肃,选择个人爱好而非技术术语。
graph LR
subgraph 传统编程语言命名
A[FORTRAN] -->|Formula Translation| A1[技术缩写]
B[COBOL] -->|Common Business Oriented Language| B1[技术缩写]
C[Pascal] -->|Blaise Pascal| C1[历史人物]
D[Java] -->|Java咖啡| D1[产品隐喻]
end
subgraph Python的命名哲学
E[Python] -->|Monty Python's Flying Circus| E1[娱乐致敬]
E1 -->|短、独特、神秘| E2[反叛传统]
E1 -->|幽默>严肃| E3[创意优先]
E1 -->|个人爱好| E4[个人色彩]
end
A1 -.->|对比| E2
C1 -.->|对比| E4
D1 -.->|对比| E3
style A fill:#e0e0e0
style B fill:#e0e0e0
style C fill:#e0e0e0
style D fill:#e0e0e0
style E fill:#e8f5e9
style E1 fill:#c8e6c9
style E2 fill:#a5d6a7
style E3 fill:#81c784
style E4 fill:#66bb6a
三、IDLE:致敬 Eric Idle 的 IDE
1. 官方名称与隐藏致敬
Python 的默认集成开发环境叫做 IDLE。官方说法是:IDLE 代表 Integrated DeveLopment Environment(集成开发环境)。但这个缩写略显牵强——因为正确的缩写应该是“IDE”而不是“IDLE”。
实际上,IDLE 的名字是对 Monty Python 成员 Eric Idle 的致敬。正如 Python 的名字来自 Monty Python 团体,IDLE 的名字来自团体中的具体成员。
2. 双重致敬:eric IDE
更有趣的是,Python 社区中还有另一个名为 eric 的 IDE。这个名字同时致敬了 IDLE(Python 的 IDE)和 Eric Idle(Monty Python 成员),形成了一个嵌套式的致敬链条。
四、spam 与 eggs:Python 文档的“元语法变量”
1. 从 foo/bar 到 spam/eggs
在编程世界中,foo、bar 和 baz 是传统的“元语法变量”(metasyntactic variables)——用于示例代码中的占位符名称。这些词源于 1960 年代的 MIT 黑客文化,与 FUBAR(Fouled Up Beyond All Recognition)军事俚语有关。
Python 社区打破了这一传统,选择使用 spam 和 eggs 作为示例变量名。这直接来自 Monty Python 的 Spam sketch——那个著名的餐厅场景,菜单上的每道菜都含有 Spam 午餐肉,而维京人不断高唱“Spam, lovely Spam, wonderful Spam”。
flowchart LR
subgraph "传统编程惯例"
A["foo"] --> B["bar"]
B --> C["baz"]
end
subgraph "Monty Python梗"
D["spam"] --> E["eggs"]
E --> F["bacon"]
F --> G["ham"]
end
subgraph "Python官方文档"
H["'spam eggs' 字符串示例"] --> I["spam变量名"]
I --> J["eggs变量名"]
J --> K["spam*3 重复操作"]
end
subgraph "第三方库"
L["python-docx<br/>monty-truth.png"] --> M["Google Style Guide<br/>likes_spam / eggs"]
M --> N["Sphinx文档<br/>spam(eggs)函数"]
end
A -.->|"Python打破传统"| D
D --> H
H --> L
style A fill:#e0e0e0
style D fill:#ffebee
style H fill:#e8f5e9
style L fill:#e1f5fe
2. 官方文档中的 spam/eggs
Python 官方教程《An Informal Introduction to Python》中,spam 和 eggs 频繁出现:
>>> 'spam eggs' # single quotes
'spam eggs'
这段代码出现在 Python 官方文档的字符串示例部分,教导新手如何使用单引号定义字符串。
在作用域讲解中:
def spam():
eggs = 31337
spam()
print(eggs) # 报错!eggs 未定义
这里 spam() 函数和 eggs 变量成为讲解局部作用域与全局作用域的经典示例。
3. 第三方库与文档中的致敬
Google Style Guide 的 Python 文档示例中:
class SampleClass(object):
"""Summary of class here."""
Attributes:
likes_spam: A boolean indicating if we like SPAM or not.
eggs: An integer count of the eggs we have laid.
这里 likes_spam 和 eggs 作为类属性示例,直接致敬了 Monty Python 的 Spam sketch。
python-docx 库的官方文档中,示例代码甚至包含一个名为 monty-truth.png 的图片文件:
document.add_picture('monty-truth.png', width=Inches(1.25))
records = (
(3, '101', 'Spam'),
(7, '422', 'Eggs'),
(4, '631', 'Spam, spam, eggs, and spam')
)
表格数据直接引用了 Spam sketch 中的经典台词:“Spam, spam, eggs, and spam”。
Sphinx 文档工具(Python 文档的标准生成工具)的示例中:
.. py:function:: spam(eggs)
ham(eggs)
Spam or ham the foo.
这里 spam(eggs) 和 ham(eggs) 作为函数文档示例,再次致敬了 Monty Python。
五、Cheese Shop、Eggs 与 Wheels:Python 生态的食物梗
1. Cheese Shop:PyPI 的前身
Python 包索引(Python Package Index)的前身叫做 “Cheese Shop”。这直接致敬了 Monty Python 的 Cheese Shop sketch——一个顾客走进奶酪店,发现店里没有任何奶酪,店员却不断用荒谬的理由解释为什么缺货。
这个梗完美讽刺了早期 Python 包管理的混乱状态——包索引存在,但许多包却无法安装或使用。后来 PyPI 正式建立,但“Cheese Shop”的别名在 Python 社区中流传了很久。
2. Python Eggs:打包格式
2004 年,Python 引入了一种名为 “Eggs” 的包分发格式(.egg 文件)。这是对 Monty Python Spam sketch 的又一次致敬——在餐厅场景中,“egg and spam”是菜单上的经典组合。
3. Python Wheels:延续食物传统
2010 年,Python 引入了 “Wheels” 打包格式(.whl 文件)。虽然 Wheels 本身不是直接的 Monty Python 引用,但它延续了 Python 生态中以食物命名工具的传统,从 Cheese Shop 到 Eggs 再到 Wheels,形成了一条有趣的食物链。
六、Python 社区文化中的 Monty Python 基因
1. The Zen of Python:美学与幽默
Python 社区最著名的文化文档是 The Zen of Python(Python 之禅),由 Tim Peters 撰写。其中包含:
“Beautiful is better than ugly.” “Simple is better than complex.” “Readability counts.”
这些不是技术指标,而是美学和情感价值。正如 Guido van Rossum 选择 Monty Python 作为命名灵感,Python 社区始终强调编程可以是一种创造性的、充满乐趣的人类活动,而非冰冷的机械过程。
2. “Batteries Included”哲学
Python 以“内置电池”(Batteries Included)著称——标准库极其丰富,开箱即用。这种“慷慨”的态度与 Monty Python 的喜剧精神一脉相承:不吝啬、不 pretentious(自命不凡),而是直接、实用、有趣。
3. PyCon 会议中的 Monty Python 引用
每年的 PyCon 全球开发者大会中,Monty Python 的引用无处不在。教程用 Monty Python 的 sketch 来解释编程概念,演讲者引用经典台词作为开场白,甚至会议 T 恤上印有 “Nobody expects the Spanish Inquisition!” 的标语。
七、Python 生态中的 Monty Python 致敬时间线
timeline
title Python生态中的Monty Python致敬时间线
1989 : Guido van Rossum开始开发Python
: 命名灵感来自Monty Python's Flying Circus
1991 : Python 0.9.0发布
: 官方文档开始使用spam/eggs示例
1994 : Python 1.0发布
: IDLE IDE诞生(致敬Eric Idle)
2003 : PyPI前身"Cheese Shop"上线
: 致敬Monty Python的Cheese Shop sketch
2004 : Python Eggs打包格式引入
: 再次致敬Spam梗
2010 : Python Wheels打包格式引入
: 延续食物命名传统
2018 : Guido van Rossum卸任BDFL
: 幽默文化已深入Python基因
2020s : PyCon会议持续引用Monty Python
: 新一代开发者继承spam/eggs传统
八、为什么这很重要?
1. 编程是创造性的人类活动
Python 以 Monty Python 命名这一事实,向全世界传递了一个重要信息:编程不是冰冷的数学或机械工程,而是一种创造性的、充满乐趣的人类活动。Guido van Rossum deliberately 选择了欢乐而非严肃,选择了个人爱好而非企业品牌。
2. 降低编程门槛
Python 的幽默基因降低了编程的门槛。当新手看到 spam = 1 而不是 foo = 1 时,他们感受到的是一种友好、亲切的氛围,而不是冰冷的技术壁垒。这种“去 intimidating”的文化是 Python 成为最受欢迎编程语言之一的重要原因。
3. 社区认同与归属感
Python 开发者之间有一种默契的认同感。当你看到同事写下 spam 和 eggs 时,你知道你们共享着同一种文化基因。这种“内部梗”(inside joke)增强了社区凝聚力,形成了独特的 Pythonic 身份认同。
结语
从1989年 Guido van Rossum 的圣诞假期项目,到今天全球数百万开发者手中的 Python 代码,Monty Python 的喜剧精神已经深深融入了这门语言的 DNA。每一次你写下 spam = 1,每一次你在 IDLE 中调试代码,每一次你浏览 PyPI 寻找包,你都在参与一个跨越三十多年的文化传统。
Python 不是唯一以娱乐命名的技术产品(比如 Java 以咖啡命名),但它是唯一将喜剧梗系统化、制度化地融入整个生态的主流编程语言。在这个意义上,Python 不仅仅是一门编程语言——它是 Monty Python 荒诞喜剧精神在数字时代的延续。
正如 Python 官方 FAQ 所回答的:
“Do I have to like ‘Monty Python’s Flying Circus’?” “No, but it helps. :)”
原文 https://blog.csdn.net/2301_79518550/article/details/162145431