更新时间: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'
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19