Python之禅虽然来自Python,但是其中道理也适用于其它编程语言,甚至工作和生活,今天小编就来说说关于python哲学教程?下面更多详细答案一起来看看吧!

python哲学教程(Python之禅解读)

python哲学教程

引言

Python之禅虽然来自Python,但是其中道理也适用于其它编程语言,甚至工作和生活。

今天就和大家一起来品读一下,看能给我们带来哪些启示。

正文

The Zen of PythonPython之禅


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.迷茫不盲目,总有最优路。初看不知处,还得使劲悟。

这三句话是一个整体,可能有两种意思,分别来说一下。第一种解释比较狭隘,可以理解为在编程时,可使用的Python库或编程方法可能有多种,但是,Python的创始人其实已经预见到了这一点,其中一种肯定是最佳的实现方式,如果像Python之父那样对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! 命名空间很绝妙,谁用谁知道

命名空间应该是Python的概念,在其它语言里,可能叫包、模块等。虽然名称不大相同,但是用处大抵是一样的,都是用来划分代码的,体现的是分而治之的理念。分而治之是解决复杂问题的重要思想,将大的问题分解为小的问题,有利于理解、聚焦和逐一击破。命名空间就是这样的东西,方便我们将代码依照概念领域分门别类地管理,从而利于理解和维护。

结语

好了,解读就到这里了,我们可以看到,不足20句话,作者苦心运用了很多技法,犹如诗作一般,虽然是Python编程之道,也可以轻松应用到其它语言的编程中,其中蕴含的道理和方法,甚至可以运用到其它工作和生活实践中,在此向作者Tim Peters致以深深的敬意[作揖],也感谢大家阅读。

,