zoukankan      html  css  js  c++  java
  • 带函数的装饰器、多个装饰器装饰一个函数

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

    __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) ----@wap----->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)
  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/ctztake/p/7257721.html
Copyright © 2011-2022 走看看