有没有python函数装饰器可以做的,我可以做一流的函数?

时间:2014-08-19 02:56:52

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

我正在尝试理解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。此外,当我们使用fun2打包logger时,如果我们愿意,我们仍然可以调用原始fun2而无需记录。

我能用装饰器做些什么我不能用一流的功能吗?或者将装饰器看作包裹函数的语法糖形式更好?

1 个答案:

答案 0 :(得分:1)

装饰器语法:

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

defined完全等同于以下语法:

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

所以不,没有任何装饰者可以做的,一流的功能是不可能的。装饰器一流的功能。