Python自学笔记(17day)
装饰器的进阶
(1)
#如果我们要装饰很多函数,就需要写很多装饰名字,如果不想用,就要注释掉很多次,太麻烦 #一次可以用3层装饰器来实现简化 FALG=True def login(f): def wrapper(func): def inner(*args,**kwargs): if FALG: """ 函数之前的操作 """ ret=func() """ 函数之后的操作 """ return ret else: ret=func() return ret return inner @login(FALG) #先调用函数login(),将FALG传入,拿到inner再装饰 def func(*args ,**kwargs): print("帅哥") #当不需要运行时,只需要FALG=False,就不会执行函数的前后操作了
(2)
def wrapper1(func): def inner(): print("wrapper1,before") ret=func() print("wrapper1,after") return ret return inner def wrapper2(func): def inner(): print("wrapper2,before") ret=func() print("wrapper2,after") return ret return inner def func(): print("in") @wrapper2 @wrapper1 func() #输出:wrapper2,before # wrapper1,before # in # wrapper1,after # wrapper2,after #结论:多个装饰器装饰同一个函数,执行顺序:函数前按顺序依次并列执行+函数执行+函数后逆序 #执行 21---12