一、装饰器定义
器-》工具
装饰-》添加新功能
装饰器就是定义一个函数,用该函数去为其他函数添加新功能
二、为何要用装饰器
开放封闭原则:针对上线的功能对拓展是开放的,但是对修改源代码以及调用方式是封闭的
装饰器就是在遵循开放封闭原则的前提下为被装饰对象添加新功能
1、不修改被装饰对象的源代码
1、不修改被装饰对象的调用方式
三、如何用装饰器
import time
def index():
start=time.time()
time.sleep(1)
print('from index')
stop=time.time()
print('run time is %s' %(stop - start))
index()
import time
def index():
time.sleep(1)
print('from index')
start=time.time()
index()
stop=time.time()
print('run time is %s' %(stop - start))
import time
def index():
time.sleep(1)
print('from index')
def wrapper():
start=time.time()
index()
stop=time.time()
print('run time is %s' %(stop - start))
wrapper()
import time
def index():
time.sleep(1)
print('from index')
def wrapper(f):
start=time.time()
f()
stop=time.time()
print('run time is %s' %(stop - start))
wrapper(index)
import time
def index():
time.sleep(1)
print('from index')
def outter(f):
def wrapper():
start=time.time()
f()
stop=time.time()
print('run time is %s' %(stop - start))
return wrapper
index=outter(index)
index()
import time
def index():
time.sleep(1)
print('from index')
def home(name):
time.sleep(2)
print('home page,welecome %s' %name)
def outter(f):
def wrapper(name):
start=time.time()
f(name)
stop=time.time()
print('run time is %s' %(stop - start))
return wrapper
home=outter(home)
home("egon")
import time
def index():
time.sleep(1)
print('from index')
def home(name):
time.sleep(2)
print('home page,welecome %s' %name)
def outter(f):
def wrapper(*args,**kwargs):
start=time.time()
f(*args,**kwargs)
stop=time.time()
print('run time is %s' %(stop - start))
return wrapper
import time
def index():
time.sleep(1)
print('from index')
def home(name):
time.sleep(2)
print('home page,welecome %s' % name)
return 123
def outter(f):
def wrapper(*args, **kwargs):
start = time.time()
res = f(*args, **kwargs)
stop = time.time()
print('run time is %s' % (stop - start))
return res
return wrapper
index = outter(index)
home = outter(home)
res = index()
print(res)
res = home("egon")
print(res)