修饰器通常返回一个包装函数;只需在调用包装函数后将你的逻辑放入包装函数中即可。
def audit_action(action):
def decorator_func(func):
def wrapper_func(*args, **kwargs):
# Invoke the wrapped function first
retval = func(*args, **kwargs)
# Now do something here with retval and/or action
print 'In wrapper_func, handling action {!r} after wrapped function returned {!r}'.format(action, retval)
return retval
return wrapper_func
return decorator_func
所以audit_action(action='did something')
是一个装饰工厂,返回一个作用域decorator_func
,这是用来装饰你的do_something
(do_something = decorator_func(do_something)
)。
装修后,您的do_something
参考文献已被wrapper_func
替代。调用wrapper_func()
会导致原来的do_something()
被调用,然后你的代码在包装器func可以做的事情。
上面的代码,再加上你的榜样作用,给出了以下的输出:
>>> do_something('foo')
In wrapper_func, handling action 'did something' after wrapped function returned 'bar'
'bar'
你不知道有多少个不同的组合装饰,包装,功能和retvals我用尽了这个工作。不仅感谢代码,而且感谢您的解释。 –