装饰器的各种情况。

来源:互联网 发布:共青团网络志愿者 编辑:程序博客网 时间:2024/06/10 19:28
#装饰器
'''
#第一步:基本函数
def chiji():
    print('吃鸡真得劲~~')


#调用函数
chiji()


#第二步:扩展功能(不能直接修改原来的函数)
def zhuangshi(func):
    print('吃鸡之前,左手摸鸡~')
    func()
    print('吃鸡之后,右手摇鸡~')


def chiji():
    print('吃鸡真得劲~~')


chiji = zhuangshi(chiji)
print(chiji)


#第三步:实现基本装饰器功能
def zhuangshi(func):
    def inner():
        print('吃鸡之前左手摸鸡')
        func()
        print('吃鸡之后右手摇鸡')
    return inner


def chiji():
    print('吃鸡真得劲~')


chiji = zhuangshi(chiji)
chiji()
chiji()


#第四步:语法糖方式实现装饰器
def zhuangshi(func):
    def inner():
        print('吃鸡之前左手摸鸡')
        func()
        print('吃鸡之后右手摇鸡')


    return inner


@zhuangshi
def chiji():
    print('吃鸡真得劲~')


chiji()




#第五步:带有参数的函数的装饰器
def zhuangshi(func):
    def inner(a,b):
        print('吃鸡之前左手摸鸡')
        func(a,b)
        print('吃鸡之后右手摇鸡')


    return inner


@zhuangshi
def chiji(a,b):
    print(a + '在' + b +'吃鸡真得劲~')


chiji('文章','网吧')




#带有返回值的函数
def zhuangshi(func):
    def inner():
        print('吃鸡之前左手摸鸡')
        var = func()
        print('吃鸡之后右手摇鸡')
        return var
    return inner


@zhuangshi
def chiji():
    print('吃鸡真得劲~')
    return '落地98K~~'


result = chiji()
print(result)


#第六步:带有收集参数的函数的装饰器
def zhuangshi(func):
    def inner(*args,**kwargs):
        print('吃鸡之前左右摸鸡')
        func(*args,**kwargs)
        print('吃鸡之后右手摇鸡')


    return inner


def chiji(*args,**kwargs):
    print('参与吃鸡的人有',args)
    print('吃鸡地点为',kwargs)


#调用函数
chiji('庞志','张帅','文章','老甘',pz = '网吧',zs = '理发店',wz = '厕所',lg = 'America')




#第七步:带有参数的装饰器
def outer(arg):
    def zhuangshi(func):
        def inner():
            if arg == '吃鸡':
                print('吃鸡之前左手摸鸡')
            elif arg == '撸管':
                print('撸管之前洗洗手')
            func()
            if arg == '吃鸡':
                print('吃鸡之后右手摇鸡')
            elif arg == '撸管':
                print('撸管之后抖一抖')


        return inner
    return zhuangshi


@outer('吃鸡')
def chiji():
    print('吃鸡真得劲~')
chiji()


@outer('撸管')
def luguan():
    print('小撸怡情大撸伤肾')
luguan()


#第八步:使用类作为装饰器的参数


class Chi:
    def before():
        print('吃鸡之前左手摸鸡')
    def after():
        print('吃鸡之后右手摇鸡')


def outer(arg):
    def zhuangshi(func):
        def inner():
            arg.before()
            func()
            arg.after()


        return inner
    return zhuangshi


@outer(Chi)
def chiji():
    print('吃鸡真得劲~')


chiji()
chiji()




#第九步:使用类作为装饰器
#装饰器(类)
class Decor:
    #初始化方法
    def __init__(self,arg):
        self.arg = arg


    #添加call魔术方法
    def __call__(self,func):
        #将func参数存入对象使得其他方法可以调用
        self.func = func
        #返回未来的吃鸡函数
        return self.inner


    #声明内部函数
    def inner(self):
        print('吃鸡之前左手摸鸡')
        self.func()
        print('吃鸡之后右手摇鸡')


@Decor('啥都行')
def chiji():
    print('吃鸡真得劲~')


chiji()






#第十步:为类添加装饰器
def zhuangshi(func):
    #未来的chi类的结果
    def inner():
        print('吃鸡之前左手摸鸡')
        var = func()
        print('吃鸡之后右手摇鸡')
        return var


    return inner


@zhuangshi
class Chiji:
    pass


result = Chiji()
print(result)






#第十一步:装饰器的嵌套


def zhuangshi1(func):
    def inner():
        print('吃鸡之前左手摸鸡')
        func()
        print('吃鸡之后右手摇鸡')


    return inner


def zhuangshi2(func):
    def inner():
        print('吃鸡之前洗洗手')
        func()
        print('吃鸡之后抖一抖')


    return inner




@zhuangshi1
@zhuangshi2
def chiji():
    print('吃鸡真得劲~~')


chiji()

'''


Python学习交流、资源共享群:563626388 QQ

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 洛阳理工学院怎么样 河南洛阳旅游 洛阳著名景点 洛阳信息港bbs 洛阳bbs信息港 洛阳玩的地方 洛阳公交线路查询 洛阳特色美食 洛阳人才网手机版 洛阳是哪个省 洛阳房地产信息网 洛阳有啥好玩的 洛阳游玩攻略 洛阳是几线城市 洛阳是那个省 洛阳一日游怎么安排 洛阳日报电子版 洛阳师范大学 洛阳景区有哪些 洛阳特色名小吃 洛阳两日游攻略 洛阳直辖市获批 洛阳博物馆旅游 洛阳景点大全 洛阳理工大学 河南洛阳旅游景点 洛阳交通广播 洛阳周边旅游 洛阳大学有哪些 洛阳美食攻略 洛阳景点排名 洛阳属于几线城市 洛阳卫生考试网 洛阳有什么好玩的地方 洛阳有什么好玩的 洛阳有哪些大学 洛阳网手机版 洛阳牡丹花什么时候开 洛阳到石家庄 洛阳的旅游景点有哪些 洛阳有什么好吃的