一丶开放封闭原则
开放原则:
增加一些额外的新功能
封闭原则:
不改变源码.以及调用方式
二丶初识装饰器
装饰器:
也可以称为装饰器函数,诠释开放封闭原则,装饰器的本质是闭包
###普通版装饰器
import time
def timmer(x): # x 接收的原函数的内存地址
def inner():
start_time=time.time()
x() # 执行 原函数
print(f'执行效率{time.time()-start_time}')
return inner
def index():
time.sleep(2)
print(f'欢迎访问本站博客园')
index=timmer(index) #将timmer函数执行的结果返回,付给index变量
index() #这里执行的inner函数
###标准版 @timmer是语法糖(黏贴在被装饰函数,先于执行被装饰函数),装饰器函数必写在被装饰函数之上.
import time
def timmer(func): # 此时 func 就是一个自由变量
def inner():
start_time = time.time()
func() # func 是timmer函数传递过来的index原函数的内存地址
print(f'执行效率 {time.time() - start_time}')
return inner
三丶被装饰器数带返回值
###需求被装饰函数有返回值
import time
def timmer(func): # 这里argv 接收的真正要执行的原函数.
def inner():
start_time=time.time()
var=func()
print(f'{time.time()-start_time},{args[0]},{args[1]}')
return var #原函数有返回值, 这里是执行完 inner函数 中真正要返回的原函数执行的结果
return inner
四丶被装饰函数带参数
###需求 被装饰函数有参数
import time
def timmer(func):
def inner(*args,**kwargs): # inner方法执行,接收的参数, 将形参参数聚合 args=(1,2)
# 函数定义时 , * ,** 代表聚合
start_time=time.time()
res=func(*args,**kwargs) # 执行真正的原函数, 将参数打散 func(1,2)
# 函数执行时 ,* ,** 代表打散
print(f'{time.time()-start_time} 这是{args[0]}')
return res
return inner
五丶标准终终结版装饰器
###### 装饰器原版 ####
def warpper(func):
def inner(*args,**kwargs):
'''被装饰器之前的操作'''
ret=func(*args,**kwargs)
'''被装饰函数之后的操作'''
return ret
return inner
####拓展版 计算index函数执行的效率
import time
def timmer(func):
def inner(*args,**kwargs): # inner方法执行,接收的参数, 将形参参数聚合 args=(1,2)
# 函数定义时 , * ,** 代表聚合
start_time=time.time()
res=func(*args,**kwargs) # 执行真正的原函数, 将参数打散 func(1,2)
# 函数执行时 ,* ,** 代表打散
print(f'{time.time()-start_time} 这是{args[0]}')
return res #原函数有返回值, 这里是执行完 inner函数 中真正要返回的原函数执行的结果
return inner #返回inner函数, 给index重新赋值.