本文是对浅析decorator一文做的一点补充。
国际惯例,先上代码:
from functools import wraps
def log(text):
def decorator(func):
@wraps(func)
def wrapper(*args, **kw):
print('%s call %s()' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log('execute')
def f():
pass
执行:
print(f())
输出:
execute call f()
None
同没有参数的decorator相比,我们发现,在装饰器函数的内部又多定义了一个高级函数,在此例中具体指的是def decorator(func):
这个函数。
那么如何理解呢?
我的理解是这样的:
最外层的装饰器函数def log(text):
用来接收我们要传入的参数'execute'
,那么我们要改造的旧函数def f():
就需要另一个函数来接收,这就是多写一个高级函数def decorator(func):
的意义所在。
OK,就是这么短!