您的位置:首页 > 编程语言 > Python开发

python 9-3 如何定义带参数的装饰器,提取函数签名python3 inspect.signature()

2017-01-29 10:57 821 查看
9-3 如何定义带参数的装饰器

提取函数签名python3 inspect.signature()

带参数的装饰器,也就是根据参数定制化一个装饰器可以看生成器的工厂

每次调用typeassert,返回一个特定的装饰器,然后用它去装饰其他函数

from inspect import signature

def f(a,b,c=1):pass
sig = signature(f)
sig.parameters
实现一个对被装饰的函数的参数类型检查的装饰器


from inspect import signature
def typeassert(*ty_args,**ty_kargs):
def decorator(func):
#func ->a,b
#d = {'a':int,'b':str}
sig = signature(func)
btypes = sig.bind_partial(*ty_args,**ty_kargs).arguments
def wrapper(*args,**kargs):
#arg in d,instance(arg,d[arg])
for name, obj in sig.bind(*ty_args,**ty_kargs).arguments:
if name in btypes:
if not instance(obj,btyes[name]):
raise TypeError('"%s" must be "%s"' %(name,btyes[name]))

return func(*args,**kargs)
return wrapper
return decorator

@typeassert(int,str,list)
def f(a,b,c):
print a,b,c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: