首页技术文章正文

Python培训:装饰器对带有返回值的函数进行装饰

更新时间:2022-10-17 来源:黑马程序员 浏览量:

IT培训班

  前面介绍的装饰器,都是对不带返回值的函数进行装饰,如果要对有返回值的函数进行装饰,那么该如何实现呢,先来看一段代码:

>>> 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所示。

1665989701000_函数调用情况分析.jpg

  图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'


分享到:
在线咨询 我要报名
和我们在线交谈!