1.装饰器
用来增强原有函数的功能,但又不修改原本的函数,进一步理解认为通过对函数a内部再定义一个新函数b,让函数b的返回值为a(*k,**kw)
a的返回值为b的函数名,最终达到偷换函数名,但原有功能不改变。还可以再b函数的内部加入新的功能。
(注:括号里的参数个人理解为,用来保证原有函数的入口参数不变),
例:打印一个时间
def now():
print('2021-1-11')
now()
f=now
f()
print(f.__name__)
结果
2021-1-11
2021-1-11
now
加入装饰器
代码:
def log(func):
def wrapper(*args,**kw):
print('call %s()' % func.__name__)
return func(*args,**kw)
return wrapper
@log
def now():
print('2021-1-11')
now()
print(now.__name__)
输出
call now()
2021-1-11
wrapper
注:此处的@是装饰器的一种语法,通过最后一行的结果,还可以发现函数的函数名已经悄悄发生改变