更新时间: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
程序执行后,没有输出任何内容,也就是说调用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()函数,发现成功得到了返回值。
>>> result = test() >>> result 'itheima'