一:开放封闭原则,对扩展是开放的,对修改是封闭的
二:装饰器,装饰器本质可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象
装饰器的功能是:
在不修改被装饰对象源代码以及调用方式的前提下为其添加新功能
原则:
1.不修改源代码
2.不修改调用方法
目标:添加新功能
装饰器的语法:在被装饰对象的正上方的单独一行。@装饰器名字
import time
import random
#装饰器
def timmer(func):#func=index
#func=index
def wrapper():
start_time=time.time()
func()#index
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return wrapper
#被装饰函数
@timmer #index=timer(index)
def index():
time.sleep(random.randrange(1,5))
print('welecome to index page')
@timmer
def home():
time.sleep(random.randrange(1, 3))
print('welecome to HOME page')
# index=timmer(index) #index=wrapper
# index() #wrapper() @timmer等于这两步
index()
home()
可以加多个装饰器,计算顺序是自下而上,自上而下运行
装饰器修订版本
import time
import random
#装饰器
def timmer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return res
return wrapper
#被装饰函数
@timmer
def index():
time.sleep(random.randrange(1,5))
print('welecome to index page')
res1=index()
print(res1)