强制kwargs也会给你默认值

时间:2018-03-13 10:00:43

标签: python python-3.x

我正在研究的装饰器的一个方面是提取进入函数的参数。你怎么能让它收集默认值?

目前的代码如下:

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

1 个答案:

答案 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