至少有两种方法可以做到这一点:
方法 A(推荐):
def compound(inner_func, outer_func):
def wrapper(*args, **kwargs):
return outer_func(*inner_func(*args, **kwargs))
return wrapper
注意inner_func
不能返回字典,在这种情况下我们应该写return outer_func(**inner_func(*args, **argv))
.
用法:
def f(a, b):
return a, b+2, b+3
def g(a, b, c):
return a+b+c
k = compound(f, g)
print k(1, 2)
# output: 10
方法 B:
首先,像这样定义一个“装饰器工厂”:
def decorator_factory(inner_func):
def decorator(outer_func):
def wrapper(*args, **kwargs):
return outer_func(*inner_func(*args, **kwargs))
return wrapper
return decorator
然后你可以像这样使用它:
def f(a, b):
return a, b+2, b+3
@decorator_factory(f)
def g(a, b, c):
return a+b+c
print g(1, 2)
# output: 10