python如何定义带参数的装饰器
发布时间:2020-12-16 20:47:59 所属栏目:Python 来源:网络整理
导读:本文实例为大家分享了python定义带参数装饰器的具体代码,供大家参考,具体内容如下 案例: 实现一个装饰器,用它来检查被装饰函数的参数类型。 需求: 装饰器可以通过函数,指明函数参数类型,进行函数调用的时候,传入参数,检测到不匹配时,抛出异常 如何
本文实例为大家分享了python定义带参数装饰器的具体代码,供大家参考,具体内容如下 案例: 实现一个装饰器,用它来检查被装饰函数的参数类型。 需求: 装饰器可以通过函数,指明函数参数类型,进行函数调用的时候,传入参数,检测到不匹配时,抛出异常 如何解决这个问题? 先要获取函数的签名,并且获得装饰器中参数,然后把函数签名和装饰器中参数对应绑定 #!/usr/bin/python3 from inspect import signature def check_type(*ty_args,**ty_kwargs): def out_wrapper(func): # 通过signature方法,获取函数形参:name,age,height sig = signature(func) # 获得装饰器传来的参数, 函数签名与之绑定,字典类型 bind_types = sig.bind_partial(*ty_args,**ty_kwargs).arguments print(bind_types) def wrapper(*args,**kwargs): # 给执行函数中具体的实参进行和形参进行绑定,形成字典的形式 func_type = sig.bind(*args,**kwargs).arguments.items() print(func_type) # 循环形参和实参字典的items()形式 for name,obj in func_type: if name in bind_types: if not isinstance(obj,bind_types[name]): raise TypeError('%s must be %s' % (name,bind_types[name])) func(*args,**kwargs) return wrapper return out_wrapper # 通过装饰器实现对函数参数进行类型检查 @check_type(str,int,float) def func(name,height): print(name,height) if __name__ == '__main__': func('bei_men',18,1.75) 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |