PEP 是 Python Enhancement Proposals 的缩写,直译过来就是「Python增强建议书」也可叫做「Python改进建议书」,说的直白点就是Python相关的一些文档,主要用来传递某些信息,这些信息包括某个通知亦或是某个新的规范。关于更深层次的概念,大家有兴趣的可以自行去了解。
PEP 后面的数字从0开始一直累加,不同的数字代表不同的文档,我们今天介绍的是 PEP8,这个文档主要是用来规范 Python 代码的写法。
PEP8 里面有很多规范,作为一个业余程序员主要分享以下一些比较常用的规范。
我们知道在写 if条件、for循环、while循环、函数等语句时都是需要缩进的,正常来说缩进只要有缩进空格就行,具体缩进几个都行,所谓的无规矩不成方圆,想象一下,你习惯缩进3个,我习惯缩进5个,彼此交换代码的时候,那代码看起来是有多乱。为了避免这种局面的出现,PEP8 就建议缩进统一用4个空格。
# 建议这样
if a > b:
print("a is max")
# 不建议这样
if a > b:
print("a is max")
还有尽量不要使用 Tab
键代替空格。
Python中一行的字符数限制为79个,但是有的时候会超过79,这个时候我们就需要进行换行,在换行的时候优先使用小括号,中括号以及大括号中的隐式续行方式,而不是使用反斜杠进行续行。比如下面的运算符遇上换行符中的例子。
当我们使用括号进行续行时,就涉及到不同行与行的对齐情况。
在多行结构中右括号可以与内容对齐单独起一行作为最后一行的第一个字符。
my_list = [
1,2,3,
4,5,6
]
或者也可以与多行结构的第一行第一个字符对齐。
my_list = [
1,2,3,
4,5,6
]
有的时候多个变量名进行运算,在一行放不下时,这个时候就需要换行,那么当运算符遇上换行时我们该怎么换呢?建议在运算符的前面进行换行。
# 建议这样
income = (income1
+ income2
- cost1
- cost2)
# 不建议这样
income = (income1 +
income2 -
cost1 -
cost2)
函数和类的定义,前后用两个空行隔开,这个就类似于我们在 word 里面编写文档,段前段后留空行。
在前面的举例中,建议这样和不建议这样就可以当作两个函数,这些函数之间是留两空白行。
合适的空格会增加可阅读性,比如英文和中文之间要留有一个空格,这样看起来会相对比较舒服。在 Python 代码中亦是如此。但是空格不可滥用。
建议在二元运算符两边加一个空格:如赋值(=),增量赋值(+=,-=),比较(==,<,>,!=,<>,<=,>=,in,not,in,is,is not),布尔(and, or, not)。
# 建议这样
a = 1
a = 1+2
a > b
# 不建议这样
a=1
a=1+2
a>b
但是不建议在小括号,中括号或者大括号之后;逗号、分号或者冒号之前添加空格。
# 建议这样
np.array([1,2,3])
# 不建议这样
np.array( [1,2,3] )
np.array([1 ,2 ,3])
在给某个函数参数传入参数值时,不建议使用空格。
# 建议这样
plt.label(label="test_title")
# 不建议这样
plt.label(label = "test_title")
代码注释可以帮助我们很快的理清代码,但是前提是注释写的够好够清晰,要不然不仅不会起到帮助的作用,反而会扰乱视线。关于注释主要有如下规则:
注释应该是完整一句话,如果一个注释是一个短语或简短的一句话,第一个单词应该大写。
如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成。并且每句话结束都有个句号。
行内注释是与代码写在同一行的注释,行内注释要和代码保留至少两个空格分隔。注释由#和一个空格开始。
x = max(a,b) # select big one
我们知道 Python 中有很多现成的模块可以供我们使用,在使用之前我们需要对模块进行导入,导入模块的时候我们也需要遵循相应的规则。
同时导入多个库的时候,建议分开不同的行进行导入。
# 建议这样
import pandas
import numpy
# 不建议这样
import pandas,numpy
且导入模块的代码总是位于代码的最开始部分,在模块注释和文档字符串之后,在模块的全局变量与常量之前。
在 Python 里面会涉及到很多名字,模块名、变量名、函数名、类名。这就和我们人名字一样,都是有一定讲究的。
不要以 Python 中的关键字作为变量名,比如 sum、def、list 等。
不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。 在有些字体里,这些字符无法和数字0和1区分,如果想用‘l’,用‘L’代替。
函数名应该小写,如果想提高可读性可以用下划线分隔。
上面讲了几种规范,我们可以严格按照上面的规范去写代码,按照规范去做,总觉得会有种束缚,不太舒服,可是不按照规范去写,写出来的代码确实不太美观有不易读,那可怎么办呢?有没有一种工具可以帮助我们把不规范的代码直接更改成 PEP8 的规范呢?答案是有,那就是 Autopep8
模块。
首先我们需要去安装一下这个模块,使用如下命令:
pip install Autopep8
安装好 Autopep8
模块以后我们还需要安装一个 jupyter_contrib_nbextensions
的插件,这个插件是 jupyter_notebook
中的一个插件,关于这个插件的安装在我前面的文章写过为jupyter_notebook增加目录,Jupyter_notebook
中用的都是这一个插件。
安装好插件以后,我们来到 Nbextensions
部分,然后把 Autopep8
打勾。这个时候就可以在 Jupyter_notebook
中使用 PEP8 规范了。
那具体该怎么用呢?选中你要规范化的代码,然后点击菜单栏中的「小锤子」,即可完成代码规范,就是这么简单。
先看个空格
# 规范前
a=1+2
---
# 规范后
a = 1+2
再看个缩进
# 规范前
def test_pep():
print("this is test")
---
# 规范后
def test_pep():
print("this is test")
PEP8 官网: https://www.python.org/dev/peps/pep-0008/
PEP8 中文文档: https://blog.csdn.net/ratsniper/article/details/78954852