标签:love %s rgs style 模式 固定 src date rap
? 装饰器的作用 —— 不修改函数的调用方式 但想在原来的函数前后添加功能,可以有多个装饰器,但只对一个函数,有一些装饰作用
? 原则: 开放封闭原则 开放 :扩展是开放的 封闭 :对修改是封闭的
? 图解
? 装饰器例子
def wrapper(f): # 这是装饰器函数 f是被装饰的函数名 def inner(*args,**kwargs): ‘‘‘在被装饰函数之前要做地事‘‘‘ res = f(*args,**kwargs) # 动态参数*args,**kwargs要原封不动地传给被装饰的函数f,且被装饰函数执行完的返回值要返回给res接收 ‘‘‘在被装饰函数之后要做地事‘‘‘ return res return inner
?
# 装饰器的固定模式 def wrapper(func): # 5 而func就是qqxing def inner(*args,**kwargs): res = func(*args,**kwargs) # 1 被装饰函数需要参数和返回值是res(以res接收它的返回值) #被装饰的函数func(*args,**kwargs) return res # 2 再把res返回给“我” return inner @wrapper # 3 等同于 qqxing = wrapper(qqxing),把下面函数的名字作为参数且执行完装饰器函数(wrapper)之后的返回的inner还叫qqxing def qqxing(): # 4 qqxing()函数“使用”了 wrapper 装饰器 print(520) res = qqxing() # 6 而qqxing此刻是inner,因为qqxing = wrapper(qqxing)中执行完wrapper(qqxing)之后返回的qqxing以res接收返回值 print(res)
?
def wrapper(func): def inner(*args,**kwargs): print(‘在被装饰的函数执行之前做的事‘) ret = func(*args,**kwargs) print(‘在被装饰的函数执行之后做的事‘) return ret return inner # 把inner的内存地址返回回来,让下一行注释的lover接收 @wrapper # 等效于lover = wrapper(lover) def lover(date): print(‘We have been %s days falling in love‘% date ) return ‘love story‘ ret = lover(24) print(ret)
?
def outer(*args,**kwargs): print(args) print(*args) def inner(*args): print(‘inner:‘,args) inner(*args) outer(1,2,3,4) # 关于*args,接收就是聚合,调用就是打散
标签:love %s rgs style 模式 固定 src date rap
原文地址:https://www.cnblogs.com/passengerlee/p/10354014.html