Я пытаюсь разобраться с декораторами в Python. Я получил представление о том, для чего они нужны, из различных ответов [ex] в SO: запускать код до и / или после оформленной функции без изменения самой функции. Тем не менее, у меня возникают проблемы с пониманием того, что означает возвращение объекта функции.
В чем разница между возвратом возвращаемого значения функции и возвратом функционального объекта ? Я получаю, что ссылка на саму функцию возвращается, но какая польза от этого поведения?
Я не использовал приведенный ниже синтаксис @Decorator
, так как все еще изучаю его.
Например:
def some_func():
print('returning 1')
return 1
def Decorator(func):
def Wrapper():
print('doing something first')
val = func()
print('doing something after')
return val
return Wrapper
Decorated_func = Decorator(some_func)
Decorated_func()
Выполнение этого в PythonTutor: вызов Decorated_fun c () показывает, что Wrapper
имеет возвращаемое значение 1
, а Decorator
имеет возвращаемое значение Wrapper
. Означает ли это, что Decorator
на самом деле имеет возвращаемое значение 1
при вызове Decorated_func()
? Я бы подумал, что синтаксис этого поведения будет (в пределах Decorator
) return Wrapper()
. Какой смысл возвращать объект функции?