> For the complete documentation index, see [llms.txt](https://chanshiyu.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chanshiyu.gitbook.io/blog/shi-yu/2018/02python-zhi-chan.md).

# 02 Python 之禅

作为一个前端攻城狮，工作中用到最多的是 JavaScript，但我接触的第一门编程语言却是 Python，大学时期只是略作了解，而现在，是时候重启 Python 之路，开启新的篇章。

### 缘起

在知乎上看到过一个话题：[如果每人最多只能学习 5 门编程语言，你会选择哪 5 门，为什么？](https://www.zhihu.com/question/39615525/README.md)。

之后我便在思考，在未来漫长的时间里，自己的选择是什么。在几经思量之后，谨慎得到了答案：JavaScript、Java 和 Python，并没有选择五种，因为我不确定其他选择是否正确，也不希望到最后自不量力。

对于 JavaScript，是目前的饭碗，工作的支柱，但对于这门语言，却又恨又爱。它生于仓促，兴于风口，多年来饱受争议。虽自 ES6 发布之后，JavaScript 语法大为改善，也添加了许多新特性。可它一些糟粕之处却又让我无法忍受，我所向往的一门优雅的、简而美的编程语言，而它目前并不深入我心。不过 JavaScript 社区生态一直在蓬勃发展，对于它的未来，我一直在翘首展望。

对于 Java，编程界的元老，行业的老大，几十年来经久不衰。网上流传的一句话：每一个程序员，都应该学一门静态语言。而 Java 目前来看是一个不错的选择。其实 Java 的学习计划很久之前便开始了，买了一大摞书，陆陆续续翻阅了不少，只是状态一直比较低迷，教材现在已经积灰，但却从未想过放弃，它的篇章，或许得搁置一段时间。

对于 Python，是我接触的一门编程语言，虽然接触得早，但对它得理解却并不深刻。虽然社区对它得吹捧之声从未断绝，现在都快被捧上神坛，大数据分析、人工智能、区块链等等方向发展得声势浩大。但我对学习这门语言并没有设置过高的追求。目前只是在 LeetCode 上刷题有些帮助。暂且入门，往后自说。

### Python 之禅

最后在此敬上 Tim Peters 的 The Zen of python，希冀自己以后恪守规范，写出优雅简洁的代码。

> 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.\
> 可读性很重要（优美的代码是可读的）
>
> Special cases aren't special enough to break the rules.\
> Although practicality beats purity.\
> 即便假借特例的实用性之名，也不可违背这些规则（这些规则至高无上）
>
> Errors should never pass silently.\
> Unless explicitly silenced.\
> 不要包容所有错误，除非你确定需要这样做（精准地捕获异常，不写 except:pass 风格的代码）
>
> 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.\
> 虽然这并不容易，因为你不是 Python 之父
>
> 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!\
> 命名空间是一种绝妙的理念，我们应当多加利用（倡导与号召）
