目录
前言
库的推荐
flake8【检查Python代码】
安装
案例
缺点
black【修改Python代码】
安装
案例
结语
参考
Python学习过程中,常常听到一个词——“Pythonic”。这是一种代码风格,至于什么样的风格才算是Pythonic,并没有一个明确的定义。
不过,Python发展的30年里,众多使用者在实际环境中慢慢达成一些代码编写方面的共识,总结出了一些可供参考的经验或是规则,PEP8就是其中之一。pep8规范(官网链接)
PEP8中包含的内容并不少,如果我记不住怎么办,接下来就来推荐两个能够辅助你写出符合PEP8规范代码的第三方库。
flake8能够扫描并检测你的Python代码,并给出符合规范的建议。安装命令:
# Linux/macOS
$ python3 -m pip install flake8
# Windows
$ python -m pip install flake8
(如果pip路径已配置完成,可以直接pip install flake8)
使用方法很简单,比如我编写了这么一段代码test.py:
from math import hypot
def vectorabs(x,y):
return hypot(x, y)
x = 3
y=4
print(vectorlength(x,y))
math库中的hypot函数用于返回欧几里得范数,如果参数x,y表示一个向量,那么函数返回向量的模。
接下来让flake8对代码进行检查,命令及输出结果如下:
以第一行输出为例“test.py”是检查的代码文件名;
“3:1”指第三行第一列;
“E302”为flake8错误代码;
剩余部分是flake8给出的修改建议,此处为导入包的语句应该和函数定义语句之间空两行,但是我空了一行。
第二条输出建议是,函数的参数x,y逗号后面应该加入一个空格。
......
flake8并不能完美地给出建议,比如常量的命名应该全为大写,并适当加入下划线以分割语义,如PI,MAX_NUM等。
而变量和函数名的规范应当是小写,并加以下划线做语义分割。
flake8是不知道你起的名字是不是用来存储常数值的,也就没办法建议你用大写还是小写。同样的,如果你命名中并未用下划线做语义上的分割,flake8也不会给予建议,因为它也不知道哪几个字母放一起就是一个单独的语义块。
因此,flake8不会过多在命名上提供建议,这些情况就需要我们自己注意了。
flake8很好用,那万一我酣畅淋漓地写了几百行上千行代码,一检测发现每行有两三处需要修改,多麻烦、多累呀。
那black就可以出场了,它能帮你自动修改Python代码。
# Linux/macOS
$ python3 -m pip install black
# Windows
$ python -m pip install black
仍旧以flake8中的脚本为例,black --check [filename]命令,判断代码是否需要修改。
(输出的框框是编码问题,一个心碎的表情,无需关注)
black --diff [filename],查看black将要做的修改、
加上“—”标记的是需要修改部分,而修改后的内容为“+”标记后的部分。
如,上图显示的第一个“—”处,是函数定义语句,而它的修改建议“+”之后,是在定义语句前多空一行,并且函数结束后再空两行。
black [filename]命令,修改代码:
执行这条命令,black就会修改你的源码。之后再查看源码,就显得没那么辣眼睛了。
要写出Pythonic的代码,需要大量阅读他人编写的规范代码,并加以长时间的练习才能达到。
两个第三方库可以提供些许的帮助,但道阻且长,请君努力。
Write More Pythonic Code(原文链接,收录于PyCoder's Weekly #517 March 22, 2022)