Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Python декораторы

#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)

Комментариев нет:

Отправить комментарий