#python #python_3x #декоратор
Каким образом функция func() передалась как аргумент в функцию deco() ? ps = input("Введите пароль:") def test_pass(p): def deco(f): if p == "universe": return f else: return lambda: "Access denied" return deco @test_pass(ps) def func(): return "Access approval" print(func())
Ответы
Ответ 1
Грубо говоря, Python разворачивает конструкцию @test_pass(ps) def func(): ... в def func(): ... decorator = test_pass(ps) # В два шага для понятности func = decorator(func)Ответ 2
В Питоне функции - это есть объекты. То есть мы можем сними делать всё, что сможем сделать с объектами. Например как в случае с декоратором. передавать объект функции как аргумент. так как func это есть объект функции, а func() вызов ps = 'any argument' decorator = test_pass(ps) # возращает объект внутренней функции deco. func = decorator(func) # вызывается deco(f)
Комментариев нет:
Отправить комментарий