在你进入 Python 的 CMD 或者终端里,甚至是 IDE 里,写入这样的一段代码,然后直接运行:
import this
你不会看见任何花哨的计算结果或者复杂的输出。后台只会刷出一首充满了智慧、哲学与禅意的英文诗 《The Zen of Python》(Python 之禅)。

它是 Python 的核心开发者 Tim Peters 给每一个 Python 使用者的 心法。

Beautiful is better than ugly.
优美胜于丑陋。
很多人会想,反正代码是给计算机看的,只要能运行,随便怎么写。但 Python 之禅第一句话就告诉你:代码是给人看的,必须足够优雅。
我们以过滤列表中的偶数为例:
# 叠一堆括号和循环
numbers = [1, 2, 3, 4, 5]
evens = []
for i in range(len(numbers)):
if numbers[i] % 2 == 0:
evens.append(numbers[i])
# 列表推导式简洁明了
numbers = [1, 2, 3, 4, 5]
evens = [x for x in numbers if x % 2 == 0]
不需要多余的变量,不仅看着赏心悦目,接手代码的同事也会快速明白用意。
Explicit is better than implicit.
明了胜于晦涩。
虽然 Python 提供了很多一行代码操作,但是并不是这是最好的选择。
比如,有些人很喜欢炫技,觉得别人看不懂自己的代码就能显得自己很强。但是 Python 很反对这种谜语人操作。
比如,我们想写一个根据 VIP 等级进行折扣的函数:
# 强行用一行 Lambda 定义函数
get_discount = lambda u: 0.5 if u.vip == 3 else (0.8 if u.vip == 2 else (0.9 if u.vip == 1 else 1.0))
def get_discount(user):
if user.vip == 3:
return 0.5
if user.vip == 2:
return 0.8
if user.vip == 1:
return 0.9
return 1.0
尽管代码行数变多了,但是它更加简单明了,能用简单的逻辑思想把复杂的计算过程描述清楚。这样就是自己也能很好理解代码。
There should be one-- and preferably only one --obvious way to do it.
做一件事,应该只有一种,而且最好只有一种显而易见的解决办法。
如果你用过 Perl,它的座右铭是“条条大路通罗马”,一个问题能有 n 种编码方式,导致程序员看代码成本极大。
而 Python 则显得克制了很多。因为 Python 希望不管是谁来写这个逻辑,代码都应该是大同小异,这样就降低了团队协作的成本。
例如互换两个变量的值:
int a = some_value1();
int b = some_value2();
// 交换必须借助第三个变量
int temp = a;
a = b;
b = temp;
a, b = b, a
只要大家都遵守了 Python 推荐的标准,那么沟通成本自然降低。
Simple is better than complex. Flat is better than nested.
简单胜于复杂。扁平胜于嵌套。
代码最忌讳的就是过度设计。很多人学了一些设计模式,就习惯性的在一些小功能上嵌套多层结构,代码一层一层往下套,就像 GTA 的无效 if 嵌套。
而 Python 告诉我们,能躺着绝不站着,能简单绝不复杂!
对于一个多重条件的组合判断,很多人可能是这样写的:
def active_user(user):
if user is not None:
if user.is_active:
if user.has_permission:
do_something()
def active_user(user):
if user is None or not user.is_active or not user.has_permission:
return
do_something()
《Python之禅》一共有 19 条原则,今天聊的,只是冰山一角。
它教给我们的不是怎么写代码,而是怎么去克制。虽然随着 AI 的进步,编程正在被各种 Agent 所替代,但是这种好的习惯,不也能延伸到我们的生活哲学当中吗?
往期回顾: