Я изучаю декораторы на Python и столкнулся с проблемой. Я не совсем понимаю, почему вместо предоставления аргументов в декораторе и возврата функции с аргументами (как в @notaProperDecorator
) мы просто возвращаем объект функций внутри (@aProperDecorator
).
def aProperDecorator(arg):
print(arg)
def outer(func):
print("in outer")
def inner(*args,**kwargs):
print("in inner")
return func(*args,**kwargs)
return inner
return outer
def functionToDecorate(*args,**kwargs):
print("function")
def notaProperDecorator(arg):
print(arg)
def outer(func):
print("in outer")
def inner(*args,**kwargs):
print("in inner")
return func(*args,**kwargs)
return inner(*args,**kwargs) #here
return outer(func) #and here also
В этом случае я думал, что произойдет нечто похожее на Java. То есть, если функция возвращает функцию, мы должны вызвать ее напрямую (например, return function("test")
)
РЕДАКТИРОВАТЬ: Как упоминалось ниже, в моем случае функция external является надлежащим декоратором. Я просто хотел использовать сложный случай, когда и декоратор, и функция могут принимать аргументы.