在Python

时间:2015-11-22 13:32:04

标签: python python-decorators

在Python中,函数装饰器再次成为一等公民的函数,它创造了灵活分配和传递的期望。在下面的例子中

def auth_token_not_expired(function):
    @auth_token_right
    def wrapper(req):
        # Some validations
        return function(req)
    return wrapper

现在我尝试将此装饰器函数指定给另一个变量as alias

login_required = auth_token_not_expired

检查分配成功后,但是当我使用@login_required语法调用它时,会导致NameError

Exception Type: NameError
Exception Value:    
name 'login_required' is not defined

我们如何将此login_required变量注册为装饰器?

1 个答案:

答案 0 :(得分:2)

你的范围不对。

调整How to make a chain of function decorators?

中的示例
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makeitalic
def hello():
    return "hello world"

hello() ## returns <i>hello world</i>

现在做作业:

mi = makeitalic

@mi
def helloit():
    return "hello world"

helloit() ## returns <i>hello world</i>