python参数注解

函数定义的弊端:

python是动态语言,变量随时可以被赋值,且能赋值为不同的类型,动态语言很灵活,但是这种特性也是弊端

难发现:由于不做任何类型检查,直到运行期问题才显现出来,或者线上运行时才能暴露出问 题 

难使用:函数的使用者看到函数的时候,并不知道你的函数的设计,并不知道应该传入什么类 型的数据

如何解决这种动态语言的弊端?

函数注解:

python3.5引入, 对函数的参数进行类型注解 ,对函数的返回值进行类型注解 ,只对函数参数做一个辅助的说明,并不对函数参数进行类型检查 , 提供给第三方工具,做代码分析,发现隐藏的bug ,函数注解的信息,保存在__annotations__属性中

函数参数类型检查:

函数参数的检查一定是在函数外,函数应该作为参数,传入到检查函数中,检查函数拿到函数传入的实际参数,与形参声明对比,__annotations__属性是一个字典,其中包括返回值类型的声明。假设要做位置参数的判断,无 法和字典中的声明对应。使用inspect模块 ,该模块提供获取对象信息的函数,可以检查函数和类,类型检查。

inspect模块

 signature(callable),获取签名(函数签名包含了一个函数的信息,包括函数名、它的参数类型、它 所在的类和名称空间及其他信息) 

 inspect.isfunction(add),是否是函数 

  inspect.ismethod(add)),是否是类的方法 

  inspect.isgenerator(add)),是否是生成器对象 

 inspect.isgeneratorfunction(add)),是否是生成器函数 

inspect.isclass(add)),是否是类 

 还有很多is函数,需要的时候查阅inspect模块帮助

Parameter对象:保存在元组中,是只读的 ; name,参数的名字 ; annotation,参数的注解,可能没有定义 ;default,参数的缺省值,可能没有定义 ;empty,特殊的类,用来标记default属性或者注释annotation属性的空值 ; kind,实参如何绑定到形参,就是形参的类型 

例:检查用户输入是否符合参数注解的要求?

思路:调用时,判断用户输入的实参是否符合要求,用户感觉上还是在调用原函数,对用户输入的数据和声明的类型进行对比,如果不符合,提示用户。

猜你喜欢

转载自www.cnblogs.com/s-p-l/p/10246149.html