【发布时间】: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