使用多个装饰器组合实现复杂功能是一种很常见的做法。 下面是一个简单的例子,使用多个装饰器组合实现复杂功能:

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print("Executed in: ", end - start)
        return result
    return wrapper

def logging(func):
    def wrapper(*args, **kwargs):
        print("Calling: ", func.__name__)
        result = func(*args, **kwargs)
        print("Called: ", func.__name__)
        return result
    return wrapper

@timer
@logging
def my_function(n):
    for i in range(n):
        print("My function is working...")
 
my_function(5)

这个例子中,我们定义了两个装饰器 timer 和 logging,分别用来计算函数执行时间和输出函数调用的日志。 我们将这两个装饰器用在了 my_function 上,这样在运行 my_function 时就会先调用 logging,再调用 timer。

这样就可以通过组合多个装饰器,来实现复杂功能。 具体来说,在这个例子中,当 my_function 被调用时,会先执行 logging 装饰器中的代码,输出函数调用的日志。 然后,执行 timer 装饰器中的代码,计算函数的执行时间。 最后,执行 my_function 函数本身的代码。

通过这种方式,我们可以将多个功能分别封装到不同的装饰器中,然后组合在一起使用。 这样就可以很方便的实现复杂的功能,并且更好的维护和重用代码。

这只是一个简单的例子,在实际应用中,组合多个装饰器的方式和组合的装饰器的功能会更加复杂。