我试图理解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
就不会写在输出上。
答案 0 :(得分:4)
您可以捕获变量中的返回值,并在打印后将其返回:
def decorator(func):
def logger(*args, **kwargs):
print "start logging"
result = func(*args, **kwargs)
print "end logging"
return result
return logger
装饰师在这里并不特别;它只是一个调用另一个函数的函数。