装饰器
概述
装饰器是用来管理和增强函数和类行为的代码,可以提供一种在函数或类定义中插入自动运行代码的机制。
特点:
1、更明确的语法;
2、更高的代码可维护性;
3、更好的一致性。
编写
函数基础
1、将函数赋给变量;
2、将函数作为参数传递;
3、函数嵌套及跨域访问。
函数定义装饰器
可以通过定义函数实现装饰器功能,既可以对函数进行装饰,也可以对类中的方法进行装饰。
例:定义一个装饰器,对函数的返回结果进行装饰,即在返回结果两端添加指定字符
1、定义装饰器及函数:
#装饰器
def p_decorator(func):
def wrapper(*args,**kwargs):
return '<p>' + func(*args,**kwargs) + '</p>'
return wrapper
#一个有返回结果的函数
def get_text():
return '欢迎学习python'
2、将函数作为参数传递:
if __name__ == '__main__':
print(p_decorator(get_text)())
#运行结果
<p>欢迎学习python</p>
3、使用装饰器语法:
@ p_decorator
def get_text():
return '欢迎学习python'
if __name__ == '__main__':
print(get_text())
#运行结果
<p>欢迎学习python</p>
类定义装饰器
也可以通过定义类实现装饰器功能,只可以对函数进行装饰,不能对类中的方法进行装饰。
例:和上文需要实现功能一样
定义装饰器及函数:
#装饰器
class P:
def __init__(self,func):
self.func = func
def __call__(self,*args,**kwargs):
return '<p>' + self.func(*args,**kwargs) + '</p>'
@P
def get_text():
return '欢迎学习python'
#运行结果
<p>欢迎学习python</p>
装饰器参数
可以通过参数让装饰器变得更加通用。
例:只定义一个函数装饰器,每次运行时可以按需要对函数结果做不同的装饰
1、定义装饰器及函数:
#装饰器
def tags(tag):
def tag_decorator(func):
def wrapper(*args,**kwargs):
return f'<{tag}>{func(*args,**kwargs)}</{tag}>'
return wrapper
return tag_decorator
#一个有返回结果的函数
def get_text():
return '欢迎学习python'
2、使用装饰器语法对函数返回结果进行指定修饰
两端加
@tags('p')
def get_text():
return '欢迎学习python'
if __name__ == '__main__':
print(get_text())
#运行结果
<p>欢迎学习python</p>
两端加
@tags('div')
def get_text():
return '欢迎学习python'
if __name__ == '__main__':
print(get_text())
#运行结果
<div>欢迎学习python</div>
3、可以叠加修饰
@tags('div')
@tags('p')
def get_text():
return '欢迎学习python'
if __name__ == '__main__':
print(get_text())
#运行结果
<div><p>欢迎学习python</p></div>
未完待续!