为什么这个python装饰工作不起作用?

时间:2017-10-15 10:39:19

标签: 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),输出将为:

start logging
end logging

但是,如果我修改我的代码并在return func(*args, **kwargs)的定义中编写logger它可以正常工作,那么end logging就不会写在输出上。

1 个答案:

答案 0 :(得分:4)

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

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

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