import time
#装饰器函数
def show_time(f):
def inner():
start = time.time()
f()
end = time.time()
print('spend %s'%(end-start))
return inner
#通过@show_time调用
@show_time
def bar():
print('bar...........')
def foo():
print('foo...')
foo()
# bar=show_time(bar)
bar()
装饰器类似与上面,先编写函数的功能模块
通过@showtime来完成函数的功能追加
@showtime作用其实就是调用上面的闭包函数show_time
上面的函数都是不带参数的函数装饰器,那么如果调用的函数有参数,并且函数个数不确定呢,可以参考下面的例子:
def show_time(f):
def inner(*x,**y):
start = time.time()
f(*x,**y)
end = time.time()
print('spend %s'%(end-start))
return inner
@show_time
def add(*x,**y):
total=0
for temp in x:
total+=temp
print(total)
# foo()
# bar=show_time(bar)
bar()
add(1,5,3,6,2,4)
如果装饰器中需要添加部分其他扩展的功能,可以给装饰器带上参数,如下:
import time
def logger(flag=''):
def show_time(f):
def inner(*x,**y):
start = time.time()
f(*x,**y)
end = time.time()
print('spend %s'%(end-start))
if flag == 'true':
print('日志记录')
return inner
return show_time
@logger('true')
def bar():
print('bar...........')
@logger('true')
def add(*x,**y):
total=0
for temp in x:
total+=temp
print(total)
@logger()
def foo():
print('foo...')
# foo()
# bar=show_time(bar)
#bar()
add(1,5,3,6,2,4)
foo()