Python编码规范总结

两盒软妹~` 提交于 2019-12-22 20:18:52

前言

  有句俗话说得好:“没有规矩,不成方圆。”这句话在计算机编程领域同样适用。大家都知道,每个人编写代码的习惯与风格是不一样的。而代码风格的统一可以带来很多好处,我认为从最直观的角度来说就是增强了代码的可读性。此外,统一代码风格还有更容易发现bug、略微提高性能等好处。
  之前曾经读过一篇文章,里面提到这样一句话:“任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。”这句话对我的影响很深。我是一名大一本科在读学生,在平时的学习中不乏和同学互相讨论研究代码。我说过最多的一句话大概就是:“你这个代码写得太不规范了。”但是从来没有任何一个同学重视这句话,他们甚至会不屑一顾地回复我:“无所谓,又不是不能运行。”
  但我认为,在系统学习一门编程语言之前,首先应该学习编码规范,从开始就养成一个良好的习惯,对于以后的学习来说也是有百利而无一害。只有这样,我们才可以编写出可读性高,无论自己和他人都易于理解的代码。

Python编码规范

参考书籍:《Python从小白到大牛》
作者:关东升
出版社:清华大学出版社
ISBN:978-7-302-50933-2
除此之外,我还参考了PEP 8编码规范。

1.命名规范

  1.包名:全部小写字母,中间可以由点分隔开,不推荐使用下划线。作为命名空间,包名应该具有唯一性,推荐采用公司或组织域名的倒置。
  2.模块名:全部小写字母,如果由多个单词构成,可以用下划线隔开。
  3.类名:采用大驼峰法(即每一个单词的首字母都大写)命名。
  4.异常名:异常属于类,命名同类命名,但应该使用Error作为后缀。
  5.变量名:全部小写字母,如果由多个单词构成,可以用下划线隔开。如果变量应用于模块或函数内部,则变量名可以由单下划线开头;变量类内部私有使用变量名可以双下划线开头。不要命名双下划线开头和结尾的变量,这是Python保留的。另外,避免使用小写L、大写O和大写I作为变量名。
  6.函数名和方法名:命名同变量命名。
  7.常量名:全部大写字母,如果由多个单词构成,可以用下划线隔开。

2.注释规范

  Python中的注释语法有3种,分别是单行注释、多行注释和文档注释。

2.1 文件注释

  文件注释就是在每一个文件开头添加注释,采用多行注释。文件注释通常包括如下信息:版权信息、文件名、所在模块、作者信息、历史版本信息、文件内容和作用等。
  文件注释要根据实际情况包括内容。

2.2 文档注释

  文档注释就是文档字符串,注释内容能够生成API帮助文档,可以使用Python官方提供的pydoc工具从Python源代码文件中提取这些信息,也可以生成HTML文件。所有公有的模块、函数、类和方法都应该进行文档注释。
  文档注释推荐使用一对三重双引号“"""”包裹起来,注意不推荐使用三重单引号“’’’”。文档注释应该位于被注释的模块、函数、类和方法内部的第一条语句。如果文档注释一行能够注释完成,结束的三重双引号也在同一行。如果文档注释很长,第一行注释之后要留一个空行,然后剩下的注释内容换行要与开始三重双引号对齐,最后结束的三重双引号要独占一行,并与开始三重双引号对齐。

2.3 代码注释

  程序代码中处理文档注释时还需要在一些关键的地方添加代码注释,文档注释一般是给一些看不到源代码的人看的帮助文档,而代码注释是给阅读源代码的人参考的。代码注释一般采用单行注释和多行注释。
  单行注释和多行注释要求与其后的代码具有一样的缩进级别。尾端进行注释要求注释内容极短,应该再有足够的空白(至少两个空格)来分开代码和注释。

2.4 使用TODO注释

  很多IDE工具都为源代码提供了一些特殊的注释,就是在代码中加一些标识,便于IDE工具快速定位代码,TODO注释就是其中的一种。
  TODO注释虽然不是Python官方所提供的,但是主流的IDE工具也都支持TODO注释。有TODO注释说明此处有待处理的任务,或代码没有编写完成。
  以PyCharm为例,TODO注释可以在PyCharm的TODO视图查看,单击其中的TODO可跳转到注释处。

3.导入规范

  导入语句总是放在文件顶部,位于模块注释和文档注释之后,模块全局变量和常量之前。每一个导入语句只能导入一个模块。
  推荐:

import re
import struct
import binascii

  不推荐:

import re, struct, binascii

  但是如果from import后面跟有多个代码元素是可以的。

from codeop import CommandCompiler, compile_command

  导入语句应该按照从通用到特殊的顺序分组,顺序是:标准库→第三方库→自己的模块。每一组之间有一个空行,而且组中模块是按照英文字母顺序排序的。

4.代码排版

  代码排版包括空行、空格、断行和缩进等内容。

4.1 空行

  空行用以将逻辑相关的代码段分隔开,以提高可读性。
  1.import语句块前后保留两个空行。
  2.函数声明之前保留两个空行。
  3.类声明之前保留两个空行。
  4.方法声明之前保留一个空行。
  5.两个逻辑代码块之间应该保留一个空行。

4.2 空格

  代码中的有些位置是需要有空格的。
  1.赋值符号“=”前后各有一个空格。

a = 10
c = 10

  2.所有的二元运算符都应该使用空格与操作数分开。

a += c + d

  3.一元运算符:算法运算符取反“-”和运算符取反“~”。

b = 10
a = -b
y = ~b

  4.括号内不要有空格,Python中括号包括小括号“()”、中括号“[]”和大括号“{}”。
  推荐:

doque(cat[1], {dogs: 2}, [])

  不推荐:

doque(cat[ 1 ], { dogs: 2 }, [ ])

  5.不要在逗号、分号、冒号前面有空格,而是要在它们后面有一个空格,除非该符号已经是行尾了。
  推荐:

if x == 88:
    print(x, y)
x, y = y, x

  不推荐:

if x == 88:
    print(x , y)
x , y = y , x

  6.参数列表、索引或切片的左括号前不应有空格。
  推荐:

doque(1)
dogs['key'] = list[index]

  不推荐:

doque (1)
dict ['key'] = list [index]

  7.如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格。有时需要通过自己来判断;但是,不要使用一个以上的空格,并且在二元运算符的两边使用相同数量的空格。

4.3 缩进

  4个空格常被作为缩进排版的一个级别。虽然在开发时程序员可以使用制表符进行缩进,而默认情况下一个制表符等于8个空格,但是不同的IDE工具中一个制表符与空格对应个数会有不同,所以不要使用制表符缩进。Python 3不允许同时使用空格和制表符的缩进。
  代码块的内容相当于首行缩进一个级别(4个空格)。

4.4 断行

  一行代码中最多79个字符,对于文档注释和多行注释时一行最多72个字符,但是如果注视中包含URL地址可以不受这个限制。否则,如果超过则需断行。
  1.在逗号后面断开。
  2.在运算符前面断开。
  3.尽量不要使用续行符“\”,当有括号(包括大括号、中括号和小括号)则在括号中断开,这样可以不使用续行符。有时为了省略续行符,会将表达式用小括号括起来。在括号中,续行是隐式的。
  4.反斜杠有时依然很有用。比如,比较长的,多个with状态语句,不能使用隐式续行,所以反斜杠是可以接受。
  5.续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。四空格的规则对于续行是可选的。挂行缩进不一定要用4个空格。

5.源文件编码

  Python核心发布版本中的代码总是以UTF-8格式编码(或者在Python 2中用ASCII编码)。
  使用ASCII(在Python 2中)或UTF-8(在Python 3中)编码的文件不应具有编码声明。
  在标准库中,非默认的编码应该只用于测试,或者当一个注释或者文档字符串需要提及一个包含内ASCII字符编码的作者名字的时候;否则,使用\x,\u,\U , 或者 \N 进行转义来包含非ASCII字符。
  对于Python 3和更高版本,标准库规定了以下策略(参见 PEP 3131):Python标准库中的所有标识符必须使用ASCII标识符,并在可行的情况下使用英语单词(在许多情况下,缩写和技术术语是非英语的)。此外,字符串文字和注释也必须是ASCII。唯一的例外是测试非ASCII特征的测试用例以及作者的名称。作者的名字如果不使用拉丁字母拼写,必须提供一个拉丁字母的音译。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!