类型注解
函数定义的弊端
Python是动态语言,变量随时可以被赋值,且能赋值为不同的类型 Python不是静态编译型语言,变量类型是在运行期决定的 动态语言很灵活,但是这种特性也是弊端:
- 难发现:由于不做任何类型检查,直到运行期问题才显现出来,或者线上运行时才能暴露出问 题
- 难使用:函数的使用者看到函数的时候,并不知道你的函数的设计,并不知道应该传入什么类 型的数据
函数注解
Python3.5引入 对函数的参数进行类型注解 对函数的返回值进行类型注解 只对函数参数做一个辅助的说明,并不对函数参数进行类型检查 提供给第三方工具,做代码分析,发现隐藏的bug 函数注解的信息,保存在__annotations__属性中
变量注解
Python3.6引入, 注意它也只是一种对变量的说明,非强制, 是缺省值
- def add(x:int, y:int=3):
inspect模块
signature签名
sig=inspect.signature(add)获取函数签名
sig.parameters函数的所有参数名称及注解类型
sig.return_annotation返回值注解类型
sig.parameters["x"].annotation对应参数的注解类型
判断语法
inspect.isfunction(add)是否是函数
inspect.ismethod(add)是否是类
inspect.isgenerator(add)是否是生成器
inspect.isgeneratorfunction(add)是否是生成器函数
inspect.isclass(add)是否是类
inspect.ismodule(inspect)是否是模块
inspect.isbuiltin(print)是否是内建函数
Parameter对象
保存在元组中,是只读的
name,参数的名字
annotation,参数的注解,可能没有定义
default,参数的缺省值,可能没有定义
empty,特殊的类,用来标记default属性或者注释annotation属性的空值
kind,实参如何绑定到形参,就是形参的类型
POSITIONAL_ONLY,值必须是位置参数提供
POSITIONAL_OR_KEYWORD,值可以作为关键字或者位置参数提供
VAR_POSITIONAL,可变位置参数,对应*args
KEYWORD_ONLY,keyword-only参数,对应*或者*args之后的出现的非可变关键字参数
VAR_KEYWORD,可变关键字参数,对应**kwargs