從參考資料給的例子分析:
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