目录
介绍
mypy特点
安装&配置
命令行参数
使用实践
参考文档
注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
静态类型检查是现代软件开发中的一项重要工具,它可以帮助我们在编写代码时发现潜在的类型错误,提高代码的可读性和可维护性。在众多的静态类型检查工具中,mypy是一种受欢迎且功能强大的选择。本文我将详细介绍mypy的特点、使用方法和实践经验。
本篇文章《Python代码扫描:静态类型检查的最佳选择mypy》属于【Python代码规范与扫描】系列内容的第七篇,前面六篇可以根据自己情况自行查阅,同时欢迎公众号CTO Plus后续的文章:
代码规范与静态扫描系列内容:
mypy让动态语言 Python 拥有静态类型检查的能力,是一个代码静态类型检查器。能帮助我们更早地发现代码中的类型错误,从而减少不必要的调试和维护时间。
它通过使用Python的类型标注功能,能够确保变量类型始终如一,始终是定义的那样,不会因为中途的某次赋值,把一个列表变成了字符串。
mypy能正常识别出类似于字符串与数字相加这种错误,无论是直接hard code 写的还是字符串变量加上整型变量。在代码中声明了a_list是一个只包含数字的列表,当传入一个字符串的时候就会报错。这块就比pyflakes好点,有这块需求的可以选择mypy。
mypy是一个Python的静态类型检查工具,具有以下几个特点:
可以通过pip命令安装mypy,如下所示:pip install mypy
关于与IDE PyCharm的集成使用,可以参考前面的文章Ruff和pylint的使用,也简单,此处不做论述。
此处我总结下Mypy工具常用的一些命令行参数,其他的可以参考官方文档:
--strict:启用严格模式,会检查更多的类型错误。
--ignore-missing-imports:忽略缺少的导入。
--follow-imports=
--disallow-untyped-defs:禁止未注释的函数和方法没有类型注解。
--disallow-untyped-calls:禁止未注释的函数和方法的调用没有类型注解。
在实际使用mypy的过程中,可以根据以下经验来提高检查的效果:
1. 配置规则:根据项目的需求,可以通过配置文件或命令行参数来设置规则和忽略列表。可以参考mypy的官方文档和社区的经验,选择适合自己项目的规则。
2. 定期检查:建议定期对代码进行类型检查,以保持代码的质量和可维护性。可以在代码提交前或持续集成环境中执行检查,帮助开发者及时发现和修复类型错误。
3. 关注警告:除了类型错误,mypy还会输出警告信息。有时警告可能不是严重的问题,但也值得关注。可以根据项目的需求,决定是否修复警告。
4. 结合编辑器:建议在编辑器中集成mypy,以便在开发过程中实时检查代码。许多流行的编辑器,如VS Code和PyCharm,都提供了mypy的插件和集成功能。
添加类型注解:在Python代码中,使用类型注解来指定变量和函数的类型。例如,可以使用`int`来注解整数类型,使用`str`来注解字符串类型。关于类型注解的详细使用和介绍,请关注公众号CTO Plus后续的文章。
接下来是一个简单的使用示例
首先,我们创建一个myfile.py 的Python文件,并使用类型注释描述变量和函数的类型信息。
def add_numbers(a, b):
return a + b
为该函数添加类型注释
def add_numbers(a: int, b: int) -> int:
return a + b
“a”和“b”的类型均为“int”,并且该函数将返回一个“int”的值。
在终端中运行mypy命令来检查该文件中是否存在类型错误。例如:mypy myfile.py。
如果mypy发现了类型错误,mypy将输出每个类型错误的位置、描述和类型信息。我们可以根据这些信息来定位和修复代码中的类型错误,来解决这些问题。
如果代码没有任何类型错误,则mypy将不会输出任何内容。
在编辑器中配置mypy插件,以便在编写代码时持续检查类型错误。
将mypy集成到编译流程中,以确保代码可以顺利地通过类型检查。
执行检查:在命令行中执行以下命令,即可对指定的Python代码进行静态类型检查:
当然,我们也可以对整个目录下的工程进行检测,比如我们的工程目录为/path/to/code,执行下面的命令即可。
mypy /path/to/code
这将对指定路径下的所有Python文件进行类型检查,并输出类型错误和警告。
Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接
更多精彩,关注我公号,一起学习、成长
关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247484278&idx=1&sn=2b774f789b4c7a2ccf10e465a1b9def6&chksm=e81c2070df6ba966026fd7851efa824b5e2704e3fd34e76228ca4ce64d93f7964cd4abe60f2b#rd
标准库系列-推荐阅读:
Python基础之开发必备-标准库(内置模块)汇总详细介绍(持续更新……)
Python标准库45. math模块实践
Python标准库87. typing模块实践
Python标准库88. 数据库 (sqlite3) 实践
Python标准库89. signal模块实践以及与Linux的信号
看这一篇就够了Python的35个关键字的含义、作用、特性以及使用方式详解
推荐阅读:
Python基础之最新的73个内置函数(1)
Python基础之最新的73个内置函数(2)
Python基础之最新的73个内置函数(3)
Python基础之最新的73个内置函数(4)
Python基础之最新的73个内置函数(5)
Python基础之最新的73个内置函数(6)
Python基础之最新的73个内置函数(7)