Python:藏在"import this"里的编程哲学

什么是 Python 之禅?
藏在解释器里的 19 条编程哲学

如果你刚接触 Python,一定见过或即将见到这样一行神秘的代码:import this。它不像 import osimport sys 那样提供具体的功能模块,而是会输出一段看似"鸡汤"的文字。这段文字就是 《The Zen of Python》(Python 之禅),由 Python 核心开发者 Tim Peters 撰写,被 Guido van Rossum 钦点为 Python 社区的非官方设计哲学指南。

它只有 19 句话,却概括了 Python 从语法设计到社区文化的核心精神。对于新手来说,读懂它意味着你已经开始理解 Python 为什么"看起来舒服";对于老手来说,它是代码审查时判断"这行代码够不够 Pythonic"的标尺。

Python 彩蛋 编程哲学 Tim Peters PEP 20

诞生故事:一场 T 恤标语引发的意外

2001 年秋天,会议组织公司 Foretec 正在筹备第十届 International Python Conference(IPC 10,即 PyCon 的前身)。他们打算征集一条印在会议 T 恤上的标语,结果从社区收到了 500 多条投稿。

Guido van Rossum、Fredrik Lundh、Jeremy Hylton、Tim Peters、Barry Warsaw 等核心开发者被邀请担任评审。他们从 500 多条中筛选出 130 多条,然后就卡住了——直到会议快开始也没定下来。

眼看会议日期逼近,Tim Peters 和 Barry Warsaw 决定采用”淘汰赛”机制:两人轮流评审,每次淘汰一半留下一半。经过几轮残酷的筛选,最终 “import this” 脱颖而出。

大家对这个结果非常满意,但随即意识到一个尴尬的问题:他们必须真的实现这个功能。经过简短讨论,”import this” 被定为输出 Tim Peters 写的《The Zen of Python》。为了让这个彩蛋更有趣,他们决定用 ROT13 加密算法对文本做简单混淆——这就是你今天在源码里看到的那串乱码的由来。

冷知识:ROT13 是一种凯撒密码,每个字母替换为它后面第 13 个字母(A→N,B→O,以此类推)。由于字母表只有 26 个字母,ROT13 的加密和解密是同一个操作——对密文再做一次 ROT13 就还原了。

亲自体验:在解释器里输入 import this

打开你的 Python 环境(IDLE、PyCharm、VS Code 终端或系统命令行),输入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>>>>import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

如果你按住 Ctrl 点击 Python 源码中的 this.py,会看到一段令人困惑的字符串——那就是 ROT13 加密后的《Python 之禅》。Python 在打印时实时解密,所以你读到的是明文,但源码里存的是密文。这个设计本身就是对”实用主义击败纯粹主义”(practicality beats purity)的完美诠释。

逐条解读:19 条哲学的中文翻译

以下翻译综合了社区多个版本,力求在准确和通顺之间取得平衡:

Beautiful is better than ugly.
优美胜于丑陋——Python 以编写优美的代码为目标。
Explicit is better than implicit.
明了胜于晦涩——代码应当清晰直白,命名规范,风格统一。
Simple is better than complex.
简洁胜于复杂——优美的代码应当简洁,不要有复杂的内部实现。
Complex is better than complicated.
复杂胜于凌乱——如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁。
Flat is better than nested.
扁平胜于嵌套——优美的代码应当是扁平的,不能有太多的嵌套层级。
Sparse is better than dense.
间隔胜于紧凑——优美的代码有适当的间隔,不要奢望一行代码解决所有问题。
Readability counts.
可读性很重要——优美的代码是可读的,这也是 Python 强制缩进的原因。
Special cases aren't special enough to break the rules.
即便假借特例的实用性之名,也不可违背这些规则——这些规则至高无上。
Errors should never pass silently. Unless explicitly silenced.
不要包容所有错误,除非你确定需要这样做——精准地捕获异常,不写 except: pass 风格的代码。
In the face of ambiguity, refuse the temptation to guess.
当存在多种可能,不要尝试去猜测——而是尽量找一种,最好是唯一一种明显的解决方案。
Although that way may not be obvious at first unless you're Dutch.
虽然这并不容易,因为你不是 Python 之父——这里的 Dutch 就是指 Guido van Rossum。
Now is better than never. Although never is often better than *right* now.
做也许好过不做,但不假思索就动手还不如不做——动手之前要细思量。
If the implementation is hard to explain, it's a bad idea.
如果你无法向人描述你的方案,那肯定不是一个好方案。
If the implementation is easy to explain, it may be a good idea.
反之,如果容易解释,那它可能是个好方案——这是方案测评标准。
Namespaces are one honking great idea -- let's do more of those!
命名空间是一种绝妙的理念,我们应当多加利用——倡导与号召。

为什么新手应该了解 Python 之禅?

很多初学者会觉得这 19 句话像是”正确的废话”——优美当然比丑陋好啊,这还用说?但当你真正开始写代码,面对以下场景时,Python 之禅就会从抽象原则变成具体指导:

  • 命名纠结时:"明了胜于晦涩"提醒你,变量名 data 不如 user_list,缩写 tmp 不如 temp_buffer
  • 代码膨胀时:"扁平胜于嵌套"告诉你,三层嵌套的 if 应该拆成函数,或者改用 early return。
  • 异常处理时:"不要包容所有错误"警告你,裸的 except: 会吞掉所有异常,包括你根本没预料到的那些。
  • 功能取舍时:"做也许好过不做,但不假思索就动手还不如不做"阻止你在凌晨两点往生产环境 push 一段"先试试"的代码。

Python 之禅不是法律,它是社区共同认可的美学标准。当你参加代码审查(Code Review)时,如果有人指出”这段代码不够 Pythonic”,他大概率就是在引用这 19 条中的某一条。

进阶彩蛋:试着用 ROT13 加密一句你想对朋友说的话,然后让对方在 Python 里解密。ROT13 的加密和解密是同一个函数,因为 13 + 13 = 26,正好绕字母表一圈。
"命名空间是一种绝妙的理念——让我们多加利用!"

打开你的 Python 解释器,输入 import this,亲眼看看这 19 条哲学。
它们会潜移默化地影响你写代码的每一个决定。