我有以下装饰器示例:
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):
这行上苦苦挣扎
我根本不明白为什么def wrapper_function1()中根本需要*和**,如果它进入这里,则返回original_function(* args,** kwargs)。那不是多余的吗?
如果我将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) ....
答案 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
。