mypy 这个工具,让Python的类型提示变得非常实用

共 1585字,需浏览 4分钟

 ·

2021-11-27 21:20

在此之前,我认为 Python 的类型提示就是一个花瓶,看起来好看,但并没有实质的作用,因为即使类型写错了,或者传错了,程序仍然可以运行,直到我发现了 mypy 这个工具。今天就来聊一聊 mypy。

mypy 是 Python 中的静态类型检查器。写完带有类型提示的代码之后,先别运行行,用 mypy 命令来检查下你的代码,如果有错误,会提示你,这让 Python 的类型提示有了真正的作用。后续开发的过程中可以强制 mypy 检查无误后才能上线,借此提高代码的可读性和可维护性。

嗯,很实用,不是吗?下面分享一下如何使用 mypy。

1、安装

这个很简单了,pip install mypy 就搞定了。

2、执行

假如有这样一个 Python 程序,名称叫 demo1.py,内容如下:

def greeting(name: str) -> str: #这里提示有问题
    print (f'Hello { name }')

x: str = 'xxx' 
y: int = "yyy" #这里应该提示有问题
greeting(x) 
greeting(y) #这里应该提示有问题

代码我已经指出了两处错误,现在让 mypy 检查一下:

果然,mypy 发现了三处错误,并一一提示,非常好用啊。

如果不希望检查某一行,可以在注释上加上"# type: ignore":

y: int = "yyy" # type: ignore

mypy 具有强大且易于使用的类型系统,具有很多优秀的特性,例如类型推断、泛型、可调用类型、元组类型、联合类型和结构子类型。

3、常用的内置类型

4、配置文件

mypy 将依次查找当前目录下配置文件

  1. mypy.ini
  2. .mypy.ini
  3. pyproject.toml
  4. setup.cfg

如果还找不到,则依次寻找下面的配置文件:

  1. $XDG_CONFIG_HOME/mypy/config
  2. ~/.config/mypy/config
  3. ~/.mypy.ini

此外,你也可以使用--config-file 指定配置文件。

一个典型的 mypy.ini 配置文件如下:

# Global options:

[mypy]
python_version = 3.7
warn_return_any = True
warn_unused_configs = True

# Per-module options:

[mypy-mycode.foo.*]
disallow_untyped_defs = True

[mypy-mycode.bar]
warn_return_any = False

[mypy-somelibrary]
ignore_missing_imports = True

配置文件的详细说明,见官方文档:https://mypy.readthedocs.io/en/stable/

常见配置项:

  • files 逗号分隔的路径列表,如果命令行上没有给出,则应由 mypy 检查,支持递归。
  • exclude 应忽略检查的文件名、目录名和路径
  • ignore_missing_imports 禁止有关无法解析的导入的错误消息。
  • disallow_untyped_defs 不允许定义没有类型注释或类型注释不完整的函数。
  • plugins 逗号分隔的 mypy 插件列表

最后的话

mypy 是自动化测试中很重要的一部分,可以帮助我们检查 Python 语言的类型提示是否正确,减少代码的 bug,Python 开发的朋友们一定要用一用。今天的分享就到这里,如果有收获,请点赞转发关注,感谢支持。



浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报