为什么';这个python装饰器不工作吗?
我试图理解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)
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
调用的结果,以便稍后返回它?