知行编程网知行编程网  2022-04-21 10:00 知行编程网 隐藏边栏 |   抢沙发  136 
文章评分 0 次,平均分 0.0

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

说到 Python 的静态分析工具,就不得不说Pylint、Pyflakes 和 Mypy。他们的作用有重叠的地方,但又有各自的侧重点。在某些时候你可以只选择其中一个来用,有时候你又需要把他们结合起来使用。

Pylint:让你的代码符合 PEP-8风格

PEP-8[1]是 Python 的官方编码风格指导。我们平时常常说到的:

  1. 函数名、变量名使用小写字母和下划线,类名使用驼峰命名法
  2. 缩进使用4个空格
  3. 运算符、赋值符号左右侧都要有空格,冒号右侧有空格左侧没有空格
  4. 多行字符串用三对单引号,但是 docstring 用三对双引号
  5. ……

这些都是PEP-8中明确建议的编码风格。

Pylint 主要的功能就是用于编码风格的检验,在默认情况下 Pylint 会以 PEP-8为标准,如果你写的代码不符合 PEP-8编码规范,它就会给你报错。

如下图所示:

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

通过修改 pylint 的配置文件,可以修改它检查的方式,从而使它遵守其他的编码规范,例如你们团队大部分人是从 Java 转到 Python 的,那么可以强行让变量名函数名都变成驼峰命名法。

使用 Pylint 方便团队形成统一的编码规范。

Pyflakes: 代码逻辑和语法检查

如果你使用的 Vim 或者记事本来写代码,那么可以用 Pyflakes 来检查代码是不是有语法错误或者逻辑错误。

Pyflakes 不会检查代码的风格,所以上面被 Pylint 报了一大堆错的文件,用 Pyflakes 来检查,它只会报三个错:

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

也就是变量定义了但是没有使用。

但如果有语法错误,那么 Pyflakes 就能成功发现:

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

需要注意的是,由于 Pyflakes 是静态分析的工具,所以对于像'1' + 1这种异常是无法检查出来的。

Mypy:静态类型检查器

Mypy 让动态语言 Python 拥有静态类型检查的能力。通过使用 Python 的类型标注功能,Mypy 能够确保你的变量类型始终如一,始终是你定义的那样,不会因为中途的某次赋值,把一个列表变成了字符串。

运行效果如下图所示:

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

Mypy 能正常识别出类似于字符串与数字相加这种错误,无论是直接 hard code 写的还是字符串变量加上整型变量。

在代码中声明了a_list是一个只包含数字的列表,当你传入一个字符串的时候就会报错。

关于 Python 的类型标注,可以阅读官方文档:Syntax for Variable Annotations[2]

总结

如果只要统一团队的代码风格,那么可以使用 Pylint。Pylint 速度比较慢。

如果要检查代码中的语法错误,可以使用 Pyflakes。另有一个项目叫做 Flake8,它相当于 Pyflakes + Pylint 的合体。

如果要对代码做静态类型检查,那么使用 Mypy。

近期热门:
十行代码,用Python做一个迷你版的美图秀秀
实战:Flask + Vue 生成漂亮的词云
Python和Go都很火,我要怎么选?

情人眼里出西施,我用Python帮你搞定了!

高手心得|菜鸟学Python从入门到进阶

漫画,假装自己是Python高手,学会这十招就可以

看了范伟和葛大爷的电影,我决定用Python做个石头剪刀布


Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?


 点击阅读原文,阅读菜鸟学Python 400篇干货!

本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享