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

Python培訓(xùn):裝飾器對帶有返回值的函數(shù)進(jìn)行裝飾

更新時(shí)間:2022-10-17 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  前面介紹的裝飾器,都是對不帶返回值的函數(shù)進(jìn)行裝飾,如果要對有返回值的函數(shù)進(jìn)行裝飾,那么該如何實(shí)現(xiàn)呢,先來看一段代碼:

>>> def test():
       return 'itheima'
>>> result = test()
>>> result
'itheima'

  上述代碼定義了一個(gè)test()函數(shù),并使用result變量保存調(diào)用test函數(shù)后的返回值。此時(shí),如果我們對帶有返回值的函數(shù)進(jìn)行裝飾,那么,調(diào)用test函數(shù)后,函數(shù)的返回值還能輸出嗎?下面我們編碼來嘗試。

>>> def func(function_name):
        def func_in():
            function_name()
        return func_in
>>> @func
    def test():
        return 'itheima'
>>> result = test()
>>> result

  程序執(zhí)行后,沒有輸出任何內(nèi)容,也就是說調(diào)用test()函數(shù)返回了None。這是因?yàn)?,?dāng)使用@func對test()函數(shù)裝飾以后,test指向了func_in()函數(shù),而func_in()函數(shù)本身是沒有返回值的,具體如圖7-10所示。

1665989701000_函數(shù)調(diào)用情況分析.jpg

  圖7-10 函數(shù)調(diào)用情況分析

  在圖7-10中,test指向了新的函數(shù),原本test()函數(shù)的返回值被function_name()接收了。因此,如果想輸出“itheima”,需要使用return語句將調(diào)用后的結(jié)果返回。對裝飾函數(shù)進(jìn)行修改,修改后的代碼如下所示:

def func(function_name):
    def func_in():
         return function_name()
    return func_in

  此時(shí),再次調(diào)用test()函數(shù),發(fā)現(xiàn)成功得到了返回值。

>>> result = test()
>>> result
'itheima'


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