更新時(shí)間:2022-10-17 來源:黑馬程序員 瀏覽量:
前面介紹的裝飾器,都是對不帶返回值的函數(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所示。
圖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'