我正在研究的装饰器的一个方面是提取进入函数的参数。你怎么能让它收集默认值?
目前的代码如下:
def print_arguments_before_running(f):
def wrapper(**kwargs):
print(kwargs)
return f()
return wrapper
@print_arguments_before_running
def first_function(red=5, blue=4):
return 5
然后如果你运行它:
first_function(red=7)
>> {'red': 7}
>> 5
我想在这种情况下给出输出:
>> {'red': 7, blue: 4}
>> 5
即使你没有这样说:
first_function()
它仍然应该给你:
>> {'red': 5, blue: 4}
>> 5
答案 0 :(得分:2)
您可以使用inspect
模块获取默认值信息:
import inspect
def print_arguments_before_running(f):
def wrapper(**kwargs):
args, _, _, defaults, _, _, _ = inspect.getfullargspec(f)
realkwargs = dict(zip(args, defaults))
realkwargs.update(kwargs)
print(realkwargs)
return f()
return wrapper