代码主要模拟的功能:首先我们之前已经写好了几个功能,比如:add函数,vat函数。然后需求变更,需要我们记录一下每次功能代码执行的运行时间(这里简单的用time.sleep模拟了一下)。但是因为之前的功能代码已经写死了,所以先添加的功能要在此基础上实现却不能改变源代码结构,所以这时候就用到了@show_time方法将新的计算时间的功能以装饰器的形式加在之前写好的模块上。紧接着,又需要变更需求。希望可以在某些特定的功能模块运行时打印日志信息。于是再嵌套一层装饰器@logger(参数)。之所以不在show_time()上修改,加参数。原因也是因为show_time已经在生产环境,代码被多业务使用。不能修改,否则其他业务部门都要跟着修改,这不现实!
import time
def logger(flag=None): #标志默认为空
def show_time(f):
def inner(*args,**kwargs):
start = time.time()
f(*args,**kwargs)
end = time.time()
print('spend: %s'%(end-start))
if flag == 'true':
print('日志记录成功')
return inner
return show_time
@logger('true') #logger参数为true 表示打印日志
def add(*args,**kwargs):
sum = 0
for i in args:
sum+=i
print(sum)
time.sleep(2)
@logger()
def vat():
print('bar...')
add(2,3,4,6,6,a=3,b=6) #调用
vat()
网友评论