首頁(yè)技術(shù)文章正文

Python培訓(xùn):什么是帶有參數(shù)的裝飾器

更新時(shí)間:2022-09-30 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  前面我們講解的裝飾器,都是不帶參數(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í)的無(wú)參數(shù)裝飾器。相比無(wú)參數(shù)的裝飾器,帶參數(shù)的裝飾器只是用來(lái)“加強(qiáng)裝飾”的,如果希望裝飾器可以根據(jù)參數(shù)的不同,對(duì)不同的函數(shù)進(jìn)行不同的裝飾,那么帶參數(shù)的裝飾器是個(gè)不錯(cuò)的選擇。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!