У меня есть следующий пример декоратора:
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 (original_function, * args, ** kwargs)): my_args = args my_kwargs = kwargs def wrapper_function (args, kwargs) ....