python DAY_12(2) 函数装饰器

学习内容:
函数装饰器的相关操作
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"))

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

发布了33 篇原创文章 · 获赞 0 · 访问量 694

猜你喜欢

转载自blog.csdn.net/soulproficiency/article/details/103971783