10-5装饰器进阶_带参数的装饰器多个装饰器装饰同一个函数
Posted 一只爱学习的咩咩咩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10-5装饰器进阶_带参数的装饰器多个装饰器装饰同一个函数相关的知识,希望对你有一定的参考价值。
带参数的装饰器
只用在装饰器最外层嵌套一个即可,以达到轻易控制装饰器函数是否执行的作用
import time flag = False def timmer_outer(flag): def timmer(func): def innner(*args,**kwargs): if flag: start = time.time() ret = func(*args,**kwargs) end = time.time() print(end-start) return ret else: ret = func(*args, **kwargs) return ret return innner return timmer #执行步骤:两步(timmer_outer(flag)执行后返回timmer,再执行@tmmer) @timmer_outer(flag) def func1(): time.sleep(0.1) print("函数1") @timmer_outer(flag) def func2(): time.sleep(0.1) print("函数2") func1() func2()
多个装饰器装饰同一个函数
def wrapper1(func):#func-->f def inner1(): print("wrapper1,before f") ret = func() func() #f() print("wrapper1,after f ") return ret return inner1 def wrapper2(func): def inner2(): print("wrapper2,before f") ret = func() func() #inner1() print("wrapper2,after f ") return ret return inner2 #f=wrapper2(f) = f=wrapper2(inner1) = inner2 @wrapper2 # f=wrapper1(f) = inner1 @wrapper1 def f(): print("in f") return \'娃哈哈\' print(f())
结果:
wrapper2,before f
wrapper1,before f
in f
wrapper1,after f
wrapper2,after f
娃哈哈
以上是关于10-5装饰器进阶_带参数的装饰器多个装饰器装饰同一个函数的主要内容,如果未能解决你的问题,请参考以下文章