更新時(shí)間:2022-09-30 來源:黑馬程序員 瀏覽量:
前面我們講解的裝飾器,都是不帶參數(shù)的,這些裝飾器最終返回的都是函數(shù)名。在Python中,如果我們給裝飾器添加參數(shù),那么需要增加一層封裝,先傳遞參數(shù),然后再傳遞函數(shù)名。下面我們看一段代碼:
def func_arg(args): def func(function_name): def func_in(): print('--記錄日志-args=%s'%args) function_name() return func_in return func @func_args('haha') def test(): print('---test---') >>>test() --記錄日志-args=haha ---test---
上述代碼中,“@func_arg('haha')裝飾函數(shù)test,等價(jià)于:
test = func_arg('haha')(test)
由于函數(shù)func_args的返回值是func函數(shù)的引用,也就是函數(shù)名func,因此,上述代碼等價(jià)于:
test = func(test)
看到這行代碼,大家應(yīng)該很熟悉了,這就是前面我們學(xué)習(xí)的無參數(shù)裝飾器。相比無參數(shù)的裝飾器,帶參數(shù)的裝飾器只是用來“加強(qiáng)裝飾”的,如果希望裝飾器可以根據(jù)參數(shù)的不同,對(duì)不同的函數(shù)進(jìn)行不同的裝飾,那么帶參數(shù)的裝飾器是個(gè)不錯(cuò)的選擇。