本文是 Python 之禅特别系列的第二篇,咱们将要关注其中第三与第四条原则:简单与复杂。python
Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y plus rien à retrancher.linux
It seems that perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.git“完美并不是无可增,而是不可减。”程序员
—Antoine de Saint-Exupéry, Terre des Hommes, 1939github
编程时最常有的考量是与复杂性的斗争,只想写出让旁人无从下手的繁杂代码,对每一个程序员来说都算不上难事。假若未能触及代码的简繁取舍,那么 《Python 之禅》 就有了一角残缺。编程
尚有选择余地时,应该选简单的方案。Python 少有不可为之事,这意味着设计出巴洛克风格(LCTT 译注:即夸张和不理性)的程序只为解决浅显的问题不只有可能,甚至很简单。小程序
正因如此,编程时应当谨记,代码的简单性是最易丢失,却最难复得的。函数
这意味着,在能够选用函数来表达时不要去引入额外的类;避免使用强力的第三方库每每有助于你针对迫切的问题场景设计更稳当的简短函数。不过其根本的意图,旨在让你减小对未来的盘算,而去着重解决手头的问题。工具
以简单和优美做为指导原则的代码相比那些想要囊括未来一切变数的,在往后要容易修改得多。测试
把握用词的精确含义对于理解这条使人费解的原则是相当重要的。形容某事复杂complex,是说它由许多部分组成,着重组成成分之多;而形容某事错综复杂complicated,则是指其包含着差别巨大、难以预料的行为,强调的是各组成部分之间的杂乱联系。
解决困难问题时,每每没有可行的简单方案。此时,最 Python 化的策略是“自底向上bottom-up”地构建出简单的工具,以后将其组合用以解决该问题。
这正是对象组合object composition这类技术的闪耀之处,它避免了错综复杂的继承体系,转而由独立的对象把一些方法调用传递给别的独立对象。这些对象都能独立地测试与部署,最终却能够组成一体。
“自底建造” 的另外一例便是单分派泛函数singledispatch的使用,抛弃了错综复杂的对象以后,咱们获得是简单、几乎无行为的对象以及独立的行为。
via: https://opensource.com/article/19/12/zen-python-simplicity-complexity
做者:Moshe Zadka 选题:lujun9972 译者:caiichenr 校对:wxy
订阅“Linux 中国”官方小程序来查看