更新時間:2022-10-17 來源:黑馬程序員 瀏覽量:
前面介紹的裝飾器,都是對不帶返回值的函數進行裝飾,如果要對有返回值的函數進行裝飾,那么該如何實現呢,先來看一段代碼:
>>> def test(): return 'itheima' >>> result = test() >>> result 'itheima'
上述代碼定義了一個test()函數,并使用result變量保存調用test函數后的返回值。此時,如果我們對帶有返回值的函數進行裝飾,那么,調用test函數后,函數的返回值還能輸出嗎?下面我們編碼來嘗試。
>>> def func(function_name): def func_in(): function_name() return func_in >>> @func def test(): return 'itheima' >>> result = test() >>> result
程序執(zhí)行后,沒有輸出任何內容,也就是說調用test()函數返回了None。這是因為,當使用@func對test()函數裝飾以后,test指向了func_in()函數,而func_in()函數本身是沒有返回值的,具體如圖7-10所示。
圖7-10 函數調用情況分析
在圖7-10中,test指向了新的函數,原本test()函數的返回值被function_name()接收了。因此,如果想輸出“itheima”,需要使用return語句將調用后的結果返回。對裝飾函數進行修改,修改后的代碼如下所示:
def func(function_name): def func_in(): return function_name() return func_in
此時,再次調用test()函數,發(fā)現成功得到了返回值。
>>> result = test() >>> result 'itheima'