【问题标题】:Creating alias for function decorators in Python在 Python 中为函数装饰器创建别名
【发布时间】:2015-11-22 13:32:04
【问题描述】:

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

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

现在我尝试将此装饰器函数分配给另一个变量作为别名

login_required = auth_token_not_expired

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

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

我们如何将这个login_required 变量也注册为装饰器?

【问题讨论】:

  • 你可以做你想做的事(我检查了 Python 2.7 和 3.4)。你确定你在正确的范围内吗?你到底在哪里做login_required的任务?

标签: python python-decorators


【解决方案1】:

您的范围有误。

改编自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>

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2011-06-06
    • 1970-01-01
    • 2018-10-25
    • 2020-07-13
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多