题图:by 渡渡鸟 from 豆瓣一刻
5月的北京,气温渐渐升高,但人们依然能够在清晨和旁晚感受到春夏之交的善意。周末早早起来,阳光明亮,送了女儿去参加一个不知名的考试,回来的路上买了些好看的水果。道边有鲜花怒放,我用手机拍了,用做今天的配图。
上周写了一篇「人生苦短,我用 Python」,很多读者说意犹未尽,其实那篇文章已经足够长了。在这样一个时间被严重碎片化的时代,有那么多读者愿意花时间阅读一篇近5000字的技术文章,我还是很开心的。其实,对于任何一门编程语言来说,试图用几篇文章把这门语言的历史、发展和架构讲清楚都是不可能的,遑论细节。
物理实验告诉我们,世界是物体连续的、永不停歇的涌动,是稍纵即逝的实体不断出现和消失的过程,是一系列的震荡。一门编程语言的发展也是如此,其中总有一些稍纵即逝的「Flash Point」在左右着它的发展,代表着某种或者先进或者拖后腿的特性,如果你们有兴趣的话,后续我们就聊聊 Python 语言中那些有趣的「点」。
看到这个题目,你可能会觉得我要写点神神叨叨的东西了,或者是一篇「禅与维修摩托车的艺术」。了解 Python 历史的人都知道,Python 之禅并不是我说的,而是 Tim Peters 说的。2004年8月19日,Tim 在 Python Shell 中增加了一段偈语般的诗句,解释了什么是编程之禅。想看到这段文字的读者,打开终端中输入 python,进入 Python 交互式编程模式后,输入「import this」,会得到一下文字:
>>> 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!
我来尝试翻译一下(卖桃译本):
Python 之禅
美胜于丑
清晰胜于晦涩
简胜于繁
扁平胜于嵌套
稀疏胜于绵密
可读性很重要
一个特例不足以破坏这些规则,即便这个特例很实用
不要忽略任何错误,除非你确认要这么做
当存在多重可能性时,不要去尝试猜测
找到一种或唯一的一种解决方案去解决问题
虽然这很不容易,因为你不是 Python 之父(Guido 是荷兰人)
现在比以前更好,做好过不做,但也不要瞎做
如果某个实现很难解释清楚,那一定是个坏主意
如果某个实现很容易解释,那可能是个好主意
命名空间是个好东西,要多加应用
这些诗一样的文字表达了 Python 的编程之禅,那就是:代码要优美,要可读,要简单,要有间隔,要去处理异常,不要乱用 except:pass,要去找到最好的解决方案,写代码之前要想清楚,但也不要总去想而什么都不做,实践才能出真知,好的代码应该很容易向别人解释清楚,反之亦然,合理使用 Python 的命名空间,等等。
如果你想进入 Python 的编程世界,我希望你仔细阅读这段文字,虽然记不住什么,但是总有一天,你会在不经意间,回过头来,重新品味 Python 之禅。
如果你希望这个系列继续写下去,请告诉我。
温柔按压,冷酷赞赏