python DAY_12(2) 函数装饰器

泄露秘密 提交于 2020-01-23 03:14:46

学习内容:
函数装饰器的相关操作
Tips:
1.在学习之前,我先回顾一下之前学习的内容(参考他人)
在这里插入图片描述
2.函数在嵌套时,可直接调用嵌套的内层函数

def greeting():
   def hello():
    print("hello")
  return hello

如果直接调用greeting(),那么指向一个hello所在的地址,调用greeting()()就会调用到hello()显示结果就是打印出来的hello
3.变量在不同的域
从低到高分别是local,encapsulation,globa,build-in
如何调用不同域内的变量需要自己多加练习
重点
1.装饰器的定义和使用
虽然之前也接触和使用,但是这里还是要认真仔细的学习一遍
1)函数定义装饰器

def p_decorate(func):
    def wrapper(*m1, **m2):
        return '< % % >' +func(*m1, **m2) + '< @  # >'

    return wrapper

@p_decorate
def get_text(text):
    return text.upper()


if __name__ == '__main__':
    print(get_text("wwwe.sada.com"))

结果如下
在这里插入图片描述
2)使用类定义

class P:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        return "xyz" + self.func(*args, **kwargs) + "zyx"


# @p_decorate
@P
def get_text(text):
    return text.upper()


if __name__ == '__main__':
    print(get_text("wwwe.sada.com"))

再上一个代码上修改,方便对照
结果同上
3)参数化装饰器

# 参数化装饰器
def tags(tag, tag_other):
    def p_decorate(func):
        def wrapper(*m1, **m2):
            return f'< {tag} >' + func(*m1, **m2) + f'<{tag_other}>'

        return wrapper

    return p_decorate

    return wrapper


def p_decorate(func):
    def wrapper(*m1, **m2):
        return '< % % >' + func() + '< @  # >'

    return wrapper


class P:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        return "xyz" + self.func(*args, **kwargs) + "zyx"


# @p_decorate
# @P
@tags('^ ^', "213")
def get_text(text):
    return text.upper()


if __name__ == '__main__':
    print(get_text("wwwe.sada.com"))

在此上面代码基础上修改方便对比
结果如下
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!