装饰器(Decorator):在代码运行期间动态增加函数功能,但同时不改变函数的定义。需用到Python的@语法
import functools
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def time():
print('2021-07-14')
time()
输出:
call time():
2021-07-14
如代码所示: @log就是修饰器。
从结果可以看出,在执行time()函数之前,执行了log()函数对其进行修饰。
def funA(desA):
print("It's funA")
def funB(desB):
print("It's funB")
@funA
def funC():
print("It's funC")
输出结果:
It's funA
@funB
@funA
def funC():
print("It's funC")
输出结果:
It's funA
It's funB
函数funB先修饰funA,然后funA修饰funC,故函数执行funB(funA(funC)。