Python中的参数注解和类型注解

霸气de小男生 提交于 2020-02-15 02:19:27

函数定义的弊端:

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,实参如何绑定到形参,就是形参的类型 

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

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

类型注解与参数数据
python3.5后增加了参数注解
python3.5后引入函数注解
对函数的参数进行类型注解
对函数的返回值进行类型注解
对函数参数做义工辅助的说明,并不对函数参数进行类型检查
提供给第三方工具,做代码分析,发现隐藏的bug
函数的注解信息保存在__annotations__属性中
python3.6后增加了类型注解
python3.6后引入变量注解
参数注解示例:
def add(x:int,y:int=5)->int #:int 标识了参数应该出现的类型。为参数注解。->int 标注返回值为int类型
    """ 
        加法函数
    :param x: int类型
    :param y: int类型
    :return:  int类型
    """ #使用三引号可以为函数添加说明文档。
原文链接:https://blog.csdn.net/u013008795/article/details/89467636

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!