【问题标题】:Is there anything python function decorators can do that I can't do with first class functions?python函数装饰器有什么我不能用一流函数做的吗?
【发布时间】:2014-10-12 01:26:08
【问题描述】:

我正在尝试理解 Python 函数装饰器,但到目前为止,我还没有看到任何情况下函数装饰器可以做我使用一流函数无法做到的事情。

例如,logger decorator 经常作为一个有用的函数装饰器的简单示例给出:

def logger(f):
    def new_f():
        print("Calling %s" % f.__name__)
        return f()
return new_f

然后这个装饰器经典地与我们想要记录的函数一起使用,如下所示:

@logger
def fun1():
    [do something]

但是,对于相同的结果,我们可以只定义 func1 并用 logger 包装它:

def fun2():
    [do something]
def logged_fun2():
    return logger(fun2)()

调用logged_fun2 类似于调用fun1。此外,当我们用logger 包裹fun2 时,如果我们愿意,我们仍然可以调用原始fun2 而无需记录。

我可以用装饰器做一些我不能用一流的函数做的事情吗?还是将装饰器视为包装函数的一种语法糖更好?

【问题讨论】:

    标签: python python-decorators first-class-functions


    【解决方案1】:

    装饰器语法:

    @deco
    def f(...):
        ...
    

    defined,完全等同于以下语法:

    def f(...):
        ...
    f = deco(f)
    

    所以不,装饰器没有什么是一流的函数做不到的。装饰器一流的功能。

    【讨论】:

    • “装饰器是一流的功能。”正确,根据我对 Python 装饰器的专业知识和我对“一流函数”的简要回顾
    猜你喜欢
    • 2015-09-17
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多