装饰器的作用:
在不改变原有代码的情况下对代码进行增强。
a()中,在print(“a”)的上下输出before和after,有以下三种方式:
def a():
print("a")
- 在原有代码上进行增加
def a():
print("before")
print("a")
print("after")
# 测试
def test_a():
a()
- 单例模式
# 单例模式,加强功能,两种方式:原有代码加强;增强函数,对a()进行增强
def enhance(func):
print("before")
func()
print("after")
# 测试
def test_a():
enhance(a)
- 使用装饰器
# 单例模式,加强功能,两种方式:原有代码加强;增强函数,对a()进行增强
def enhance(func):
print("before")
func()
print("after")
# 装饰器
def tmp(func): # func是需要加强的函数,将a(a1)传给func,将a1传给*args, **kwargs
# *args, **kwargs:可以承接多个参数,比如def a(a1)
def wrapper(*args, **kwargs):
print("before")
func(*args, **kwargs)
print("after")
return wrapper
# 为什么return wrapper而不是wrapper();
# return wrapper返回wrapper的名字(函数的id);
# python的规则
@tmp
def a(a1):
print("a")
print(a1)
# 测试
def test_a():
# enhance(a)
a(20)