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

简介: 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编码规范,它就会给你报错。

如下图所示:

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

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

Pyflakes: 代码逻辑和语法检查

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

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

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

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

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

Mypy:静态类型检查器

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

运行效果如下图所示:

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

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

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

总结

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

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

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

目录
相关文章
|
Python
Python之PyLint自动检查代码
PyLint的下载地址:https://pypi.python.org/pypi/pylint PyLint的官网:http://www.pylint.org/ 从源码发行版安装,解压文件包并且运行 python setup.py install 快速安装方法 pip install pylint 错误提示说明 (C) 惯例。
1787 0
|
程序员 Python
python代码风格检查工具──pylint
pylint是一个python代码检查工具,可以帮助python程序员方便地检查程序代码的语法和风格,通过这个工具,可以使你的python代码尽量保持完美,哈哈。具体可以检查什么东西呢?比如你写了 from XXX import * 了,它就会提示你这样import是不好的。
2114 0
|
7月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1026 102
|
7月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
434 104
|
7月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
341 103
|
7月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
295 82
|
6月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
431 3
|
6月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
641 3
|
6月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
447 3
|
6月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
613 0

推荐镜像

更多