Python的设计者吉多·范罗苏姆是个有意思的人。
他不仅在圣诞节写了这门语言,用喜剧团体的名字给它命名,还在代码里藏了一首诗。
在Python IDLE里输入:
然后敲回车。
你会看到一段英文诗,叫《Zen of Python》,
翻译过来就是 《Python之禅》。
Tim Peters(蒂姆·彼得斯)是非常重要的核心开发者,用简短的话,概括了Python语言的设计哲学
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!
命名空间是个超级棒的主意,咱们多用用
诗读完了。可能有点抽象,我们挑几句,看看在代码里长什么样。
在其他语言里,遍历一个数组通常这样写:
int arr[] = {1,2,3};
for(int i=0;i<3;i++){
printf("%d",arr[i]);
}
python是这样写的
arr = [1,2,3]
for num in arr:
print(num)
对比之下,Python语言更像书面语,读起来更顺畅
不是其他语言不好,是Python的设计者选择了更优美的风格
能简单就别搞复杂
在其他语言里,交换两个变量的值,通常要借助第三个变量:
temp = a;
a = b;
b = temp;
在Python里,一行就够了:
a, b = b, a
代码是给人看的,不是只给机器跑的
看看这两段代码,做的事一模一样——计算圆的面积。
第一段:
a = 3.14
b = 5
c = a * b * b
print(c)
第二段:
pi = 3.14
radius = 5
area = pi * radius * radius
print(area)
相信你一眼就能看出,第二段的可读性更好,不需要任何注释都能看得懂
这就是“可读性”。
你的代码不光要让计算机跑,还要让人能看懂——包括未来的你自己。
有一个教学案例是写一个猜数字的小游戏,但很多学生不知道怎么写,希望想清楚所有细节,越想越难,后来就动不了手。
那就先写最简单的版本:
这个版本有语法错误,功能也不完善,但它仍然是一个程序。
再慢慢地修改bug,完善功能:加循环,加提示“大了/小了”,加随机数……,一步一个台阶。