python基础(06)——装饰器

来源:互联网 发布:淘宝拍摄 编辑:程序博客网 时间:2024/06/10 04:52
# 第一步:基本函数def lashi():    print('这是一个基本函数')#调用函数:lashi()# 第二步:扩展功能(不能直接修改原来的函数)#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi    #扩展功能1    print('这是扩展1')    #原有函数功能    var()#var调用基本函数lashi    #扩展2    print('这是扩展2')#:基本函数def lashi():    print('这是一个基本函数')#调用函数kuozhan(lashi)#第三步:实现基本装饰器功能#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi    #inner就是扩展之后的lashi函数    def inner():        #扩展功能1        print('这是扩展1')        #原有函数功能        var()#var调用基本函数lashi        #扩展2        print('这是扩展2')    return inner# :基本函数def lashi():    print('这是一个基本函数')#因为装饰函数没有函数值,lashi接收的Nonelashi= kuozhan(lashi)print(lashi)#调用函数lashi()#第四步:语法糖方式实现lashi装饰器#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi    #inner就是扩展之后的lashi函数    def inner():        #扩展功能1        print('这是扩展1')        #原有函数功能        var()#var调用基本函数lashi        #扩展2        print('这是扩展2')    return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi():    print('这是一个基本函数')lashi()#第五部:带有参数de函数的装饰器#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi    #inner就是扩展之后的lashi函数    def inner(a,b):        #扩展功能1        print('这是扩展1')        #原有函数功能        var(a,b)#var调用基本函数lashi        #扩展2        print('这是扩展2')    return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(a,b):    print(a,'这是一个基本函数',b)lashi(a='***',b='%%%')#带有返回值的函数def kuozhan(var):#var接收基本函数lashi    #inner就是扩展之后的lashi函数    def inner(a,b):        #扩展功能1        print('这是扩展1')        #原有函数功能        res = var(a,b)#var调用基本函数lashi        #扩展2        print('这是扩展2')        return res    return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(a,b):    print(a,'这是一个基本函数',b)    return '定得多练'result = lashi(a='***',b='%%%')print(result)# 第六步:带有收集参数的函数的装饰器#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi    #inner就是扩展之后的lashi函数    def inner(*a,**b):        #扩展功能1        print('这是扩展1')        #原有函数功能        var(*a,**b)#var调用基本函数lashi        #扩展2        print('这是扩展2')    return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(*a,**b):    print(a,'这是一个基本函数',b)lashi('***',nn = '&&&&')#第七步:带有参数的装饰器def outer(arg):    # 定义用于扩展函数的函数    def kuozhan(var):  # var接收基本函数lashi        # inner就是扩展之后的lashi函数        def inner():            # 扩展功能1            if arg == 0:                print('这是扩展1')            elif arg == 1:                print('llll')            # 原有函数功能            var()  # var调用基本函数lashi            # 扩展2            if arg == 0:                print('这是扩展2')            elif arg == 1:                print('llllllll')        return inner    return kuozhan@outer(0)# :基本函数def lashi():    print('这是一个基本函数')lashi()#第八步:使用类作为装饰器的参数class Shi:    #装饰    def aaaa():        print('装饰')    def bbbb():        print('装饰')def outer(arg):#接收类Shi    #定义装饰器    def kuozhan(var):#接收基本函数lashi        def inner():            #接收类的装饰aaaa            arg.aaaa()            var()#调用基本函数lashi            #接收类的装饰bbbb            arg.bbbb()        return inner    return kuozhan@outer(Shi) #基本函数def lashi():    print('这是一个基本函数')lashi()#第九步:使用类作为装饰器# 装饰器(类)class Decor:    # 初始化方法    def __init__(self, arg):  # Outer        self.arg = arg    # 添加call魔术方法    def __call__(self, func):  # zhuangshi        # 将func参数存入对象使得其他方法可以调用        self.func = func        # 返回未来的拉屎函数        return self.inner    # 声明内部函数    def inner(self):  # inner        # 扩展功能1        print('拉屎之前,沐浴更衣')        # 拉屎函数        self.func()        # 扩展功能2        print('拉屎之后,焚香祭祖')@Decor('aa')  # 相当于 @对象  -》@装饰器def lashi():    print('辣妹子拉,拉妹子辣~~')lashi()#第十步:为类添加装饰器#装饰器def kuozhan(cls):#接收类    #未来的HUman类的结果    def inner():        #扩展功能        print('装饰')        #inner的结果也是对象        var = cls()        #扩展功能        print('装饰')        #返回被装饰的内容的结果        return var    #返回未来的函数(inner)    return inner@kuozhanclass Human:    pass#实例化对象result = Human()#类的调用结果为对象print(result)#第十一步:装饰器的嵌套#装饰器1def zhuangshi2(func):    #定义内部函数    def inner():        #扩展功能1        print('壮汉死')        #调用函数        func()        #扩展功能2        print('壮汉死')    #返回内部函数    return inner#装饰器2def zhuangshi1(func):    #定义内部函数    def inner():        #扩展功能        print('装饰')        #调用函数        func()        #扩展功能        print('装饰')    #返回inner    return inner@zhuangshi2@zhuangshi1def lashi():    print('这是基本函数')lashi()Python学习交流、资源共享群:563626388 QQ
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 杨百万怎么样 杨百万身价 杨百万谈股 杨百万决策系统 杨百万的书 炒股杨百万 杨百万炒股经验 股市杨百万 杨百万 股票 股市 杨百万 杨百万儿子 杨百万指标公式 杨百万选股公式 杨百万大智慧 杨百万 书籍 杨百万股票博客 杨百万简历 杨百万股票池 杨百万炒股心得 杨百万证券 博客杨百万 杨百万软件俱乐部 杨百万2012 杨百万现状 杨百万分析师的博客 杨百万证券决策系统 无上医仙杨皓秋月盈 美国皓齿美白凝胶使用说明 杨皓宇 杨盼盼 杨盼盼个人资料 杨盼盼现在的照片 杨盼盼吧 380斤杨盼盼现在的照片 杨真真 杨真真手机铃声 杨真真发型 夏家三千金的杨真真 职来职往 杨石头 杨石头面瘫 杨祐宁