#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)
Комментариев нет:
Отправить комментарий