Python使用Mypy进行静态变量审查

  python作为一个动态语言,可以对变量不进行类型定义就使用,这就导致随着项目的增大,我们很难回顾以前某些模块中每一个变量是什么类型(特别是在函数定义里,如果不进行类型检查,很可能对一个str类型进行了()调用等等),为了在编码时能够让编译器提醒我们,也防止在运行时出现问题,采用静态变量审查工具在我们编码时就可以更好地提醒我们(注意仅仅只是提醒,并非强制错误不让运行)。

  我们这里基于Vscode的Mypy插件,进行静态代码检查(从Vscode的插件库中直接下载即可)。Mypy是基于typing这个模块进行的,从typing模块中有非常多的静态类型可以使用,比如以下例子:

from typing import List, Literal, Union, Dict, Optional

# Literal类型用于限制变量的取值范围
game: Literal["checkers", "chess"]
game = "checkers"   # 如果为其他值将会报错
# 指定List元素中的类型等价于List[Union[int, float]]
var1: List[int | float | None] = [5, 2.4]
# 可选参数int或者为 None, 一切的Union都可以改为 int | None
var2: Union[int, None] = None
# 指定Dict的key和value类型
var3: Dict[str, int] = dict()
# Optional 是指这个参数可以为空或是已经声明的类型,即 Optional[int] 等价于 Union[int, None]。
var4: Optional[int] = None


# 传参参数类型指定, 返回参数指定
def func(string: str, a: int = 20) -> List[int | str]:
    """
    :param a: 整数类型的参数
    :param string: 字符串类型的参数
    :return: 返回列表类型的数据,列表中的数据应该是int类型或者str类型
    """
    list1: List[int | str] = []
    list1.append(string)
    list1.append(a)
    return list1

func("1", 2)

  

posted @ 2024-05-22 16:52  Circle_Wang  阅读(95)  评论(0编辑  收藏  举报