前言
有句俗话说得好:“没有规矩,不成方圆。”这句话在计算机编程领域同样适用。大家都知道,每个人编写代码的习惯与风格是不一样的。而代码风格的统一可以带来很多好处,我认为从最直观的角度来说就是增强了代码的可读性。此外,统一代码风格还有更容易发现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特征的测试用例以及作者的名称。作者的名字如果不使用拉丁字母拼写,必须提供一个拉丁字母的音译。
来源:CSDN
作者:CCH21
链接:https://blog.csdn.net/qq_45554010/article/details/103653614