1、对函数的参数进行类型注解
2、对函数的返回值进行类型注解
3、只对函数参数做一个辅助说明,并不对函数参数进行类型检查
4、提供给第三方工具,做代码分析,发现隐藏BUG
5、函数注解的信息,保存在__annotations__属性中
def add(x: int, y: int, *args, **kwargs) -> int:
ret = x + y
return ret
print(add.__annotations__)
out:
{'y': <class 'int'>, 'return': <class 'int'>, 'x': <class 'int'>} # 无序字典
Python 3.6引入
变量注解: i: int = 3
业务应用:
函数参数的检查,一定是要函数外
函数应作为参数,传入到检查函数中
检查函数拿到函数传入的实际参数,与形参声明对比
__annotations__属性是一个字典,其中包括返回值类型的声明
假设要做位置参数的判断,无法和字典中的声明对应,要使用inspect模块
inspect模块
提供获取对象信息的函数,可以检查函数的类、类型检查
signature(callable),获取签名
签名包含了一个函数的信息,包括函数名,参数类型,它所在的类和名称空间及其他信息
Parameter对象
1、保存在元组中,是只读的
2、name,参数的名字
3、annotation,参数的注解,可能没有定义
4、default,参数的缺省值,可能没有定义
5、empty,特殊的类,用来标记default属性或者注解annotation属性的空值
6、kind,实参如何绑定到形参,就是形参的类型
POSITIONAL_ONLY,值必须是位置参数提供,Python没有实现,因为