学习内容:
函数装饰器的相关操作
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"))
在此上面代码基础上修改方便对比
结果如下
来源:CSDN
作者:☺����
链接:https://blog.csdn.net/soulproficiency/article/details/103971783