为什么';这个python装饰器不工作吗?

为什么';这个python装饰器不工作吗?,python,decorator,python-decorators,Python,Decorator,Python Decorators,我试图理解python中的装饰器。我不明白为什么以下方法不起作用: def decorator(func): def logger(*args, **kwargs): print "start logging" func(*args, **kwargs) print "end logging" return logger @decorator def add(a,b): return a+b 如果我调用add(2,3)

我试图理解python中的装饰器。我不明白为什么以下方法不起作用:

def decorator(func):
    def logger(*args, **kwargs):
        print "start logging"
        func(*args, **kwargs)
        print "end logging"
    return logger

@decorator
def add(a,b):
    return a+b
如果我调用
add(2,3)

start logging
end logging
但是,如果我修改代码并在
logger
的定义中写入
return func(*args,**kwargs)
,它会工作,但是
结束日志记录
不会写入输出。

您可以在变量中捕获返回值,并在打印后返回:

def decorator(func):
    def logger(*args, **kwargs):
        print "start logging"
        result = func(*args, **kwargs)
        print "end logging"
        return result
    return logger

装饰师在这里并不特别;这只是一个调用另一个函数的函数。

当您返回时,函数结束。。。。分配调用函数的结果,然后打印,然后返回该结果。
logger
函数必须返回
func
的值,但直到最后才能执行。现在想一想,您如何可能保存
func
调用的结果,以便稍后
返回它?