Python之禅----The Zen of Python_第1张图片

一、Python之禅

在 Python shell 中输入 import this,就会展示 Tim Peters 的 The Zen of Python

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 以编写优美的代码为目标) 
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似) 
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现) 
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁) 
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套) 
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题) 
可读性很重要(优美的代码是可读的) 
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上) 
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码) 
当存在多种可能,不要尝试去猜测 
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) 
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido ) 
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量) 
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准) 
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)


二、编写Pythonic代码

避免劣化代码

  • 避免只用大小写来区分不同的对象;

  • 避免使用容易引起混淆的名称,变量名应与所解决的问题域一致;

  • 不要害怕过长的变量名;

代码中添加适当注释

  • 行注释仅注释复杂的操作、算法,难理解的技巧,或不够一目了然的代码;

  • 注释和代码要隔开一定的距离,无论是行注释还是块注释;

  • 给外部可访问的函数和方法(无论是否简单)添加文档注释,注释要清楚地描述方法的功能,并对参数,返回值,以及可能发生的异常进行说明,使得外部调用的人仅看docstring就能正确使用;

  • 推荐在文件头中包含copyright申明,模块描述等;

  • 注释应该是用来解释代码的功能,原因,及想法的,不该对代码本身进行解释;

  • 对不再需要的代码应该将其删除,而不是将其注释掉;

适当添加空行使代码布局更为优雅、合理

  • 在一组代码表达完一个完整的思路之后,应该用空白行进行间隔,推荐在函数定义或者类定义之间空两行,在类定义与第一个方法之间,或需要进行语义分隔的地方空一行,空行是在不隔断代码之间的内在联系的基础上插入的;

  • 尽量保证上下文语义的易理解性,一般是调用者在上,被调用者在下;

  • 避免过长的代码行,每行最好不要超过80字符;

  • 不要为了保持水平对齐而使用多余的空格;

编写函数的几个原则

  • 函数设计要尽量短小,嵌套层次不宜过深;

  • 函数申明应做到合理、简单、易于使用,函数名应能正确反映函数大体功能,参数设计应简洁明了,参数个数不宜过多;

  • 函数参数设计应考虑向下兼容;

  • 一个函数只做一件事,尽量保证函数语句粒度的一致性;

将常量集中到一个文件

Python没有提供定义常量的直接方式,一般有两种方法来使用常量;

  • 通过命名风格来提醒使用者该变量代表的意义为常量,如常量名所有字母大写,用下划线连接各个单词,如MAX_NUMBER,TOTLE等;

  • 通过自定义的类实现常量功能,常量要求符合两点,一是命名必须全部为大写字母,二是值一旦绑定便不可再修改;