在Python解释器中输入“import this”会发生什么?如果你不知道这个彩蛋,推荐继续阅读这篇文章。
2001年秋,Foretec(一家会议组织公司)正在准备召开第十届International Python Conference(IPC 10,Pycon的前身),Foretec打算征集一条印在会议T恤衫上的标语,最终他们从Python社区收到了500多条投稿。
Foretec邀请了Python的核心开发Guido, Fred, Jeremy,Tim Peter,Barry 等来担任评审。评审委员们从投稿中过滤出了130多条后就一直没有进展,直到会议快要召开时他们也没有确定最终标语。
会议就要开始的前几天,到了评审们不得不做出决定的时候了。于是由Tim Peter和Barry 两人轮流评审,每人每次淘汰一半留下一半,直到最后只剩一条。
最终,“import this”被选了出来,大家对"import this"非常满意。但是当选择了这条以后,他们意识到他们必须要实现它。经过简单的讨论后,“import this”的被定为输出Tim Peter写的《The Zen of Python》——Python编程和设计的指导原则。
Time Peter建议在代码中对输出的内容做一些简单的混淆,于是他们就用rot13对打印内容进行了一些处理。如果你打开lib下的this.py你就会发现下面内容。
其实,rot13就是凯撒密码的一种,每个字母变换为它后面的第13个字母。例如A变换为它后面的第13个字母N,所有字母变换关系如下图:
等到IPC 10结束后,作为庆祝这次会议圆满结束的活动之一就是他们悄悄的把代码提交到Python 2.2.1。过了一段时间,才逐渐有人发现“import this”这个彩蛋。
下面是《The Zone Of Python》的中文翻译。这些准则不仅仅适用于Python,也适用于其它任何语言,值得我们细细品读。
Python之禅, by Tim Peters
优美胜于丑陋(Python以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是Python之父(这里的Dutch是指Guido)
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)