装饰器通常返回一个包装函数;只需在调用包装函数后将您的逻辑放入包装函数中。
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'