def logger(func):
def wrapper():
print('logging execution')
func()
print('Done logging')
return wrapper
@logger
def sample():
print('-- Inside sample function')
sample()
#结果
logging execution
-- Inside sample function
Done logging
简述:
#funA 作为装饰器函数
def funA(fn):
...
fn() # 执行传入的fn参数
...
return '...'
@funA
def funB():
...
实际上,上面程序完全等价于下面的程序:
def funA(fn):
...
fn() # 执行传入的fn参数
...
return '...'
def funB():
...
funB = funA(funB)
通过比对以上 2 段程序不难发现,使用函数装饰器 A() 去装饰另一个函数 B(),其底层执行了如下 2 步操作:
将 B 作为参数传给 A() 函数;
将 A() 函数执行完成的返回值反馈回 B