python知识点(5)-----------装饰器小结



装饰器就是对函数或者方法或者类进行修饰

#装饰器
#1基本函数
def shi1():
    print('1')
#shi1()
#2扩展功能
def zs2(func):
    print('1')
    func()
    print('2')
def shi2():
    print('shi 2')
#shi2 = zs2(shi2)#没有返回值就没有接收到
#shi2()
#3实现函数扩展的功能
def zs3(func):#本体函数形参
    def inner():
        print('1')
        func()
        print('2')
    return inner#打包
def shi3():
    print('shi 3')
#shi3 =zs3 (shi3)
#shi3()
#4语法糖
def zs4(func):#本体函数形参
    def inner():
        print('1')
        func()
        print('2')
    return inner#打包带走
@zs4
def shi4():
    print('shi4')
#shi4()
#5带参数的语法糖 返回值
def zs5(func):
    def inner(a,b):#本体函数的参数的形参 a,b
        print('1')
        func(a,b)
        print('2')
    return inner
@zs5
def shi5(who,who2):#本体函数的参数
    print(who,'在和',who2,'打架')
#shi5('11','22')
#5_2返回值
def zs5_2(func):
    def inner(a,b):#接收本体函数的参数的 形参 a,b
        print('1')
        var =func(a,b)#执行本体函数,根据其 实参
        print('2')
        return var#实现本体函数的返回值
    return inner#包1
@zs5
def shi5_2(who,who2):#本体函数 具有参数
    print(who,'在和',who2,'打架')
    return 'fhz'
#shi5_2('22','11')
#resu = shi5_2('22','11')
#print(resu)
#6收集参数的语法糖
def zs6(func):
    def inner(*a,**b):#inner接收收集参数 ,形参*a **b
        print('1')
        func(*a,**b)#形参*a **b
        print('2')
    return inner
@zs6
def shi6(*arg,**kwargs):#本体函数 具有收集参数
    print(arg,'在和','打架',kwargs)
#shi6('小明',one='校长')
#7带参数的装饰器
def plus(arg):#接收参数arg的实参 ’ss'
    def zs7(func):#本体方法形参func
        def inner():
            if arg =='ss':
                print('1')
                func()
                print('2')
            else:
                print('3')
                func()
                print('4')
        return inner#包2
    return zs7#包1
@plus('ss')#传参数为了控制if
def shi7():
    print('shi 7')
#shi7()
#8装饰器的类参数
class Lei:
    def f1():#类方法1
        print('f1')
    def f2():#类方法2
        print('f2')
def plus8(cls):
    def zs8(func):#本体方法形参func
        def inner():
            cls.f1()
            func()#调用本体方法
            cls.f2()
        return inner#打包2(在包1里面)
    return zs8#打包1
@plus8(Lei)
def shi8():
    print('shi 8')
#shi8()
#9  类装饰器
class  Lei8:
    def __init__(self,arg):
        self.arg = arg#把arg标志传递给对象
    def __call__(self, func):
        self.func = func#func传递给对象
        return self.inner
    def inner(self):
        if self.arg =='shi':
            print ('hello 1')
            self.func()#类的func方法
            print('hello2')
        else:
            print('hello 3')
            self.func()#类的func方法
            print('hello4')
@Lei8('shi')#shi 参数为arg 为了判断而特意加的
def shi9():
    print('shi 9')
#shi9()
#10 类的装饰器
def zs10(cls):#形参为类cls
    def inner():
        print('hello1')
        var = cls()
        print('hello2')
        return var#返回一个对象,实现实例化的原功能
    return inner#打一个包,拿出去
@zs10#装饰器zs10
class Lei10:
    pass
#Lei10()
#resu = Lei10()
#print(resu)#接收到一个对象
#11 装饰器的嵌套
def zs11_1(cls):
    def inner():
        print('hello1')
        var = cls()
        print('hello2')
        return var
    return inner
def zs11_2(cls):
    def inner():
        print('hello3')
        var = cls()
        print('hello4')
        return var
    return inner
def zs11_3(cls):
    def inner():
        print('hello5')
        var = cls()
        print('hello6')
        return var
    return inner
@zs11_1#先执行一个到cls()就向下执行
@zs11_2#执行一个到cls()就向下执行
@zs11_3#执行一个到cls()就向下执行 直到没有cls(),就一个一个完结
def shi11():
    print('shi--11')
#shi11()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值