10-3 函数装饰器
Posted cheryol
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10-3 函数装饰器相关的知识,希望对你有一定的参考价值。
装饰器形成的过程
最简单的装饰器----有返回值的----有一个参数----万能参数装饰器的作用:
不想修改函数的调用方式,但是还想再原来的函数前后添加功能#原则:开放封闭原则
开放: 对扩展是开放的
封闭: 对修改是封闭的
语法糖:@装饰器函数名,@timmer等价于func = timmer(func),其中func()是被装饰函数,timmer()就是装饰器函数
最简单的装饰器
import time def timmer(f): start = time.time() f() end = time.time() print(end-start) def func(): time.sleep(0.1) print(‘nice!‘) timmer(func)
装饰有返回值的装饰器
import time #timmer()就是装饰器函数,只是对一个函数有装饰作用 def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可 def inner(): start = time.time() ret = f() #被装饰的函数 end = time.time() print(end-start) return ret return inner @timmer #语法糖[email protected]装饰器函数名,等价于func = timmer(func) def func(): # 被装饰的函数 time.sleep(0.1) print(‘nice!‘) return ‘summertrain‘ # func = timmer(func) result = func() print(result)
有一个参数
import time #timmer()就是装饰器函数 def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可 def inner(a): start = time.time() ret = f(a) #被装饰的函数 end = time.time() print(end-start) return ret return inner @timmer #语法糖[email protected]装饰器函数名,等价于func = timmer(func) def func(a): # 被装饰的函数 time.sleep(0.1) print(‘nice!‘,a) return ‘summertrain‘ # func = timmer(func) result = func(1) print(result)
万能参数
#装饰带多个参数,且包括按照位置以及参数传参的装饰器 import time #timmer()就是装饰器函数 def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可 def inner(*args,**kwargs): start = time.time() ret = f(*args,**kwargs) #被装饰的函数 end = time.time() print(end-start) return ret return inner @timmer #语法糖[email protected]装饰器函数名,等价于func = timmer(func) def func(a,b): # 被装饰的函数 time.sleep(0.1) print(‘nice!‘,a,b) return ‘summertrain‘ # func = timmer(func) result = func(1,b=22) print(result)
装饰器的固定模式
#例子 import time def wrapper(f): # f是被装饰的函数 def inner(*args,**kwargs): ‘‘‘在被装饰函数之前要做的事儿‘‘‘ ret = f(*args,**kwargs) ‘‘‘在被装饰函数之前要后的事儿‘‘‘ return ret return inner @wrapper def func(a,b): time.sleep(0.1) print(‘nice!‘,a,b) return ‘summertrain‘ #减缩版 def wapper(func): def inner(*args,**kwargs): ret = func(*args,**kwargs) return ret return inner @wapper #qqxing = wapper(qqxing) def qqxing(): print(1111) result = qqxing()
以上是关于10-3 函数装饰器的主要内容,如果未能解决你的问题,请参考以下文章