Как я понимаю, эти две записи получаются абсолютно идентичными?
@decorator('Rap')
и
foo = decorator('Rap')(foo).
def decorator(*args):
def wrapped(func):
func.marker = args
return func
return wrapped
@decorator('Rap') # In this case we invoke decorator that returns to us wrapped function. Wrapped function becomes to decorator and decorating our foo function
def foo(a, b):
return a + b
#decorator('Rap') -> wrapped
#foo = wrapped(foo)
#foo = decorator('Rap')(foo)
foo = decorator('Rap')(foo)
print(foo)
print(foo.marker, foo(1, 2))