在装饰器中处理参数

时间:2019-06-06 11:06:41

标签: python python-decorators

我有以下装饰器示例:

def decorator_function1(original_function):
    def wrapper_function1(*args, **kwargs):
        print('wrapper executed this before {}'.format(original_function.__name__))
        return original_function(*args, **kwargs)
    return wrapper_function1

@decorator_function1
def display_info(name, age):
    print('display_info ran with arguments ({}, {})'.format(name, age))

display_info('John', 25)

即使在阅读了很多装饰器教程之后,我仍在def wrapper_function1(*args, **kwargs):这行上苦苦挣扎

  1. 我根本不明白为什么def wrapper_function1()中根本需要*和**,如果它进入这里,则返回original_function(* args,** kwargs)。那不是多余的吗?

  2. 如果我将def wrapper_function1()中的*和**留给我,则会得到错误:TypeError: wrapper_function1() takes 0 positional arguments but 2 were given,但是为什么wrapper_function1知道display info的参数?我只是看不到他们的移交地点。这样的事情对我来说很有意义

    def decorator_function1(原始功能,* args,** kwargs)):     my_args = args     my_kwargs = kwargs         def wrapper_function(args,kwargs)         ....

1 个答案:

答案 0 :(得分:0)

因为写了这个

@decorator_function1
def display_info(name, age):
    # some code

这只是“糖”:

def display_info(name, age):
    # some code

display_info = decorator_function1(display_info)

函数display_info现在如何了解decorator_function