import inspect
def looger(fn):
def wrapper(*args,**kwargs):
sig = inspect.signature(fn)
params = sig.parameters # parames 是形参 是一个元素为二元结构的有序字典,OrderedDict([('x', <Parameter "x:int">), ('y', <Parameter "y:int">), ('z', <Parameter "z:int=3">)]) # args,kwargs 是实参
va = list(params.values()) # 把字典中的值(形参)取出,用做列表处理
for arg, param in zip(args, va):
if param.annotation != inspect._empty and not isinstance(arg, param.annotation): #实参元素与形参元素进行对比判断类型
raise TypeError("you must input {}".format(param.annotation))
for k, v in kwargs.items():
if params[k].annotation != inspect._empty and not isinstance(v, params[k].annotation): # 实参中的K与形参中的K是一样的,K一样,只要进行value的类型判断即可
raise TypeError("you must input {}".format(params[k].annotation))
cc = fn(*args, **kwargs)
return cc
return wrapper
@looger
def add(x: int, y: int, z: int):
v = x + y + z
return v
add(3,6,z =5)
python函数传参时的参数类型判断
最新推荐文章于 2024-04-29 11:01:56 发布