- 装饰器是AOP编程思想,给主体函数增加功能,又不让代码入侵到主体函数中,实现高内聚,低耦合。
- 参数有两种,一种是功能函数带参数、另外一种是装饰器函数带参数,如果装饰功能部分代码也需要参数的话,可以在原来的两层函数外面再加一层,专门用来接收参数。
- 下面我们通过两个小例子来学习
#功能函数带参数;
#实现一个功能函数为加法器,传入N位数字相加;装饰器-计算函数运行时间
import time
def show_time(f):
def inner(*x):
start = time.time()
f(*x)
end = time.time()
print('speed %s'%(end-start))
return inner
@show_time
def add(*a):
sum = 0
for i in a:
sum += i
print(sum)
time.sleep(1)
add(1,2,3,5,6)
#装饰器函数带参数;
#实现一个功能函数为加法器,传入N位数字相加;装饰器-计算函数运行时间。另外增加一个打印日志的功能,实现功能输出日志,部分功能函数不需要输出日志
#bar调用的时候打印日志,add调用的时候不打印日志
import time
def logger(flag=''):
def show_time(f):
def inner(*x):
start = time.time()
print(start)
f(*x)
end = time.time()
print(end)
print('speed %s'%(end-start))
if flag =='True':
print('日志记录')
return inner
return show_time
@logger('True') #bar = show_time(bar)
def bar():
print('bar......')
time.sleep(2)
@logger()
def add(*a):
sum = 0
for i in a:
sum += i
print(sum)
time.sleep(1)
# add(1,2,3,5,6)
bar()