import inspect def check(fn):
def wrapper(*args,**kwargs):
sig = inspect.signature(fn)
params = sig.parameters #是orderedDict
values = list(params.values()) #可迭代对象转化成列表,处理后也是有序的
for k,v in enumerate(args): #因为values、args都有序
if values[k].annotation is not inspect._empty and not isinstance(v,values[k].annotation):
return '{}`s input is {} type , expected {}'.format(v,type(v),values[k].annotation)
for k,v in kwargs.items(): #kwargs与params都为字典形式,键值相同
if params[k].annotation is not inspect._empty and not isinstance(v, params[k].annotation):
return '{}`s input is {} type , expected {}'.format(k,type(v),params[k].annotation)
return fn(*args,**kwargs)
return wrapper
@check
def add(x:int,y:int):
return x + y