装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
举个简单的例子:
import logging
def use_logging(func):
def wrapper():
logging.warn("%s is running" % func.__name__)
return func()
return wrapper
@use_logging
def foo():
print("i am foo")
foo()
use_logging 就是一个装饰器,它一个普通的函数,它把执行真正业务逻辑的函数 func 包裹在其中,看起来像 foo 被 use_logging 装饰了一样,use_logging 返回的也是一个函数,这个函数的名字叫 wrapper。
我们可以用同样的原理在简单的性能测试中,把原来功能测试用例,转化为性能用例,添加记录时间功能。
def time_me(func):
def wrapper(*args,**kw):
start_time = datetime.datetime.now()
res = func(*args,**kw)
over_time = datetime.datetime.now()
print ('current Function {0} run time is {1}'.format(func.__name__ , (over_time - start_time).total_seconds()))
return res
return wrapper
@time_me
def Test_API(url, args1):
params = {args1}
res = requests.post(url,params=args1)
resp = res.json()
return resp