描述:裝飾器用于在不改變原函數代碼的情況下修改已存在的函數。常見場景是增加一句調試,再次做參數校驗也可以用到裝飾器或者為已有的函數增加log監控。。。flask的route路由就是用到的裝飾器,也許場景還很多很多。。。值得去思考
除此以外,還可以編寫接收參數的裝飾器,其實就是在原本的裝飾器上的外層又嵌套了一個函數:
但是像上面那樣使用裝飾器的話有一個問題:
也就是說原函數已經被裝飾器里的new_fun函數替代掉了。調用經過裝飾的函數,相當于調用一個新函數。查看原函數的參數、注釋、甚至函數名的時候,只能看到裝飾器的相關信息。為了解決這個問題,我們可以使用 Python 自帶的functools.wraps方法。
參考py裝飾器二,詳解functools.wraps使用