day14 带函数的装饰器多个装饰器装饰一个函数

Posted A-a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day14 带函数的装饰器多个装饰器装饰一个函数相关的知识,希望对你有一定的参考价值。

一、带参数的装饰器;------开关

__author__ = Administrator
F=True
def outer(F):
    def wap(fun):#gg
        def inner(*args,**kwargs):
            if F:
                print("inner   before")
                ret=fun(*args,**kwargs)#gg()
                print("inner   after")
            else:
                ret=fun(*args,**kwargs)
            return  ret
        return inner
    return wap

@outer(F) #先执行out(F) [email protected]>gg=wap(gg)
def gg():
    print("gg............")
gg()#inner()

二、多个装饰器装饰一个函数

__author__ = Administrator
def yn(fun):#fun=sc_inner
    def yn_inner(*args,**kwargs):
        print("yun..........before")
        ret=fun(*args,**kwargs)#sc_inner()
        print("yn...........after")
        return ret
    return yn_inner

def sx(fun):#fun=china
    def sx_inner(*args,**kwargs):
        print("sx..........before")
        ret=fun(*args,**kwargs)#china()
        print("sx...........after")
        return ret
    return sx_inner

@yn #china=yn(china)-----china=yn(sx(china))----china=yn(sx_inner)---->china=yn_ineer
@sx  #china=sx(china)----china=
def china():
    print("china is good ")

china()#yn_inner()

三、装饰器的一个应用

l = []
def wrapper(func):
    l.append(func)  #统计当前程序中有多少个函数被装饰了
    def inner(*args,**kwargs):
        #l.append(func)  #统计本次程序执行有多少个带这个装饰器的函数被调用了
        ret = func(*args,**kwargs)
        return ret
    return inner

@wrapper  #f1 = wrapper(f1)
def f1():
    print(in f1)

@wrapper #f2 = wrapper(f2)
def f2():
    print(in f2)

@wrapper #f2 = wrapper(f2)
def f3():
    print(in f3)
print(l)

 

以上是关于day14 带函数的装饰器多个装饰器装饰一个函数的主要内容,如果未能解决你的问题,请参考以下文章

10-5装饰器进阶_带参数的装饰器多个装饰器装饰同一个函数

带参数的装饰器,多个装饰器装饰一个函数,函数的有用信息。

22_装饰器带参数的装饰器多个装饰器装饰一个函数

Python全栈__函数的有用信息带参数的装饰器多个装饰器装饰一个函数

day13-14 函数对象与装饰器

Day05