1)装饰器函数:它在函数嵌套关系中作为外层函数出现,其函数体内容包括定义一个内层函数以完成装饰功能的函数,通过return语句向调用者返回内层函数对象引用。
2)目标函数:即需要进行装饰的函数,它作为装饰器函数的形参出现,该函数的定义则出现在调用装饰器的地方。
3)完成装饰的函数:它在函数嵌套关系中作为内层函数出现,用于为待装饰的目标函数添加额外功能。在这个内层函数中要调用目标函数,并为目标函数添加一些新的功能
def 装饰器名称(待装饰器函数名称):
def 装饰器函数名称():
# 目标函数执行前 添加额外功能
# 目标函数调用 待装饰器函数执行
# 目标函数执行后 添加额外功能
return 装饰器函数名称
def decorator(func):
def inner(*args, **kwargs):
# func是被装饰的对象,这里可以写执行前的功能
res = func(*args, **kwargs)
# func是被装饰的对象,这里可以写执行后的功能
return inner
# 使用装饰器
@装饰器名称
def 需装饰函数名称():
pass
def 装饰器名称(参数1, 参数2,...):
def 中间层装饰器函数名称(待装饰器函数名称)
def 里层装饰器函数名称():
# 目标函数执行前 添加额外功能
# 目标函数调用 待装饰器函数执行
# 目标函数执行后 添加额外功能
return 装饰器函数名称
return 中间层装饰器函数名称
def decorator(arg1, arg2):
def middle(func):
def inner(*args, **kwargs):
# func是被装饰的对象,这里可以写执行前的功能 可使用参数 arg1, arg2
res = func(*args, **kwargs)
# func是被装饰的对象,这里可以写执行后的功能 可使用参数 arg1, arg2
return inner
return middle
# 使用装饰器
@装饰器名称(arg1, arg2)
def 需装饰函数名称():
pass
def first(func):
def inner(*args, **kwargs):
print("函数:first执行...")
func(*args, **kwargs)
print("函数:first完成")
return inner
def second(func):
def inner(*args, **kwargs):
print("函数:second执行...")
func(*args, **kwargs)
print("函数:second完成")
return inner
# 两装饰器应用于同一函数
@first
@second
def test():
print("函数:test执行")
# 执行结果
"""
函数:first执行...
函数:second执行...
函数:test执行
函数:second完成
函数:first完成
"""
原文:https://www.cnblogs.com/deja-ve/p/12504539.html