从参考资料给的例子分析:
代码语言:javascript复制def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log # 此时可以这么理解:调用了log方法,并将 now 作为实参传入,返回的函数赋值给 now 变量
def now():
print('2015-3-25')
now()
# call now():
# 2015-3-25
def log2():
def decorator(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
return decorator
@log2() # 这种情况是先调用 log2(),其返回的 函数作为实际装饰器。所以decorator也会被调用
def now2():
print('2015-3-25')
- decorator 是一个 形参为函数 且 返回 函数的 高阶函数。重点:形参为函数 且 返回函数
- 装饰的时候,是 调用了高阶函数,被装饰的函数作为实参传入,高阶函数返回的函数赋值给 被修饰的 函数变量。
参考资料
https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584