#简单装饰器
import time
def show_time(func):
def wraper():
start_time=time.time()
func()
end_time=time.time()
print('spend %s' %(end_time-start_time))
return wraper
@show_time
def foo():
print("hello foo")
time.sleep(3)
foo()
#带参数的被装饰函数
import time
def show_time(func):
def wraper(a,b):
start_time=time.time()
func(a,b)
end_time=time.time()
print('spend %s' %(end_time-start_time))
return wraper
@show_time
def add(a,b):
time.sleep(1)
print(a+b)
add(2,4)
#不定长参数
import time
def show_time(func):
def wraper(*args,**kwargs):
start_time=time.time()
func(*args,**kwargs)
end_time=time.time()
print('spend %s' %(end_time-start_time))
return wraper
@show_time
def add(*args,**kwargs):
time.sleep(1)
sum=0
for i in args:
sum+=1
print(sum)
add(2,4,8,9)
# 带参数的装饰器
import time
def time_logger(flag=0):
def show_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
print('spend %s' % (end_time - start_time))
if flag:
print('将这个操作的时间记录到日志中')
return wrapper
return show_time
@time_logger(3)
def add(*args, **kwargs):
time.sleep(1)
sum = 0
for i in args:
sum += i
print(sum)
add(2, 7, 5)
#多层装饰器
def makebold(fn):
def wrapper():
return "<b>" + fn() + "</b>"
return wrapper
def makeitalic(fn):
def wrapper():
return "<i>" + fn() + "</i>"
return wrapper
@makebold
@makeitalic
def hello():
return "hello alvin"
hello()
#类装饰器
import time
class Foo(object):
def __init__(self,func):
self._func=func
def __call__(self):
start_time=time.time()
self._func()
end_time=time.time()
print('spend %s'%(end_time-start_time))
@Foo
def bar():
print('bar')
time.sleep(2)
bar()