Я только начинаю с Python, и я только что был выставлен декораторам. Я написал следующий код, имитируя то, что я вижу, и она работает:@ decorators в Python: почему внутренняя определенная функция?
def decorator_function(passed_function):
def inner_decorator():
print('this happens before')
passed_function()
print('this happens after')
return inner_decorator
@decorator_function
def what_we_call():
print('The actual function we called.')
what_we_call()
Но тогда я писал, что бросает ошибку:
def decorator_function(passed_function):
print('this happens before')
passed_function()
print('this happens after')
@decorator_function
def what_we_call():
print('The actual function we called.')
what_we_call()
Так почему же мы должны иметь, что внутренний вложенная функция внутри функции декоратора? Какой цели это служит? Разве не проще было бы просто использовать синтаксис второго? Что я не получу?
Самое смешное, что они оба имеют один и тот же (правильный) выход, но второй на есть текст сообщения об ошибке, а также, говоря «TypeError: объект„NoneType“не вызываемая»
Пожалуйста, используйте язык и примеры пригодных для кого-то, начинающего с Python, его первого языка программирования, а также нового для ООП! :) Благодаря.
Таким образом, decorator_function - это просто «движок», который вызывается всякий раз, когда вызывается what_we_cal(), но inner_decorator - это фактическая функция, которая возвращается обратно? Так что я мог бы вернуть все через возвращение, если это функция? – Sindyr
PS: Как мне отформатировать блок кода в комментарии? – Sindyr
Итак, вы могли бы даже написать это: 'def decorator_function (pass_function): return other_function' и эллипс полностью украшена, да? – Sindyr