问题描述
这是我的代码:
def test_deco(func):
def innrer_func(*args,**kwargs):
print('args : ',args)
print('kwargs : ',kwargs)
return func(*args,**kwargs)
return innrer_func
@test_deco
def add (x = 2,y= 3 ) :
return x + y
print(add())
这是我的输出:
args : ()
kwargs : {}
5
我的问题是,为什么*args
和**kwargs
为空,但我有正确的结果,如何将x
和y
传递到test_deco
中?
解决方法
我必须使用inspect
模块来做到这一点。
import inspect
def test_deco(func):
def innrer_func(*args):
result = func(*args)
try:
print(f'{args[0]} + {args[1]} = {result}')
except IndexError:
default_args = inspect.getcallargs(func,*args)
print(f'{default_args["x"]} + {default_args["y"]} = {result} | Default Values')
finally:
return result
return innrer_func
@test_deco
def add (x = 5,y = 8 ) :
return x + y