什么是装饰器,使用多个装饰器组合实现复杂功能
目录
使用多个装饰器组合实现复杂功能是一种很常见的做法。 下面是一个简单的例子,使用多个装饰器组合实现复杂功能:
python
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 函数本身的代码。
通过这种方式,我们可以将多个功能分别封装到不同的装饰器中,然后组合在一起使用。 这样就可以很方便的实现复杂的功能,并且更好的维护和重用代码。
这只是一个简单的例子,在实际应用中,组合多个装饰器的方式和组合的装饰器的功能会更加复杂。