前言
装饰器(decorators)是 Python 中的一种高级功能,它是一种函数,接受另一个函数作为参数,并返回一个新的函数或修改原来的函数。
一、语法定义
'''
不带参数的装饰器
'''
def decorators_demo(func):
def wrapper():
print("原始函数执行前")
func()
print("原始函数执行后")
return wrapper
@decorators_demo
def func():
print("原始函数")
if __name__ == '__main__':
func()
'''
带参数的装饰器
'''
import time
def required_time(func):
def wrapper(*args, **kwargs):
start = time.time()
a, b, a_b, n = func(*args, **kwargs)
end = time.time()
return "运行加法算式:{} + {} = {},耗费时间 {} 秒".format(a, b, a_b, end - start - n)
return wrapper
@required_time
def a_sum_b(a, b):
a_b = a + b
time.sleep(1)
return a, b, a_b, 1
if __name__ == '__main__':
a, b = 10, 7
res = a_sum_b(a, b)
print(res) # 运行加法算式:10 + 7 = 17,耗费时间 0.0045359134674072266 秒
'''
类装饰器
'''
class decorator_class:
def __init__(self, func):
self.func = func
def __call__(self):
print("原始函数执行前")
self.func()
print("原始函数执行后")
@decorator_class
def func():
print("原始函数")
if __name__ == '__main__':
func()
二、应用场景
- 日志记录:装饰器可用于记录函数的调用信息、参数和返回值。
- 性能分析:可以使用装饰器来测量函数的执行时间。
- 权限控制:装饰器可用于限制对某些函数的访问权限。
- 缓存:装饰器可用于实现函数结果的缓存,以提高性能。