如何理解Python装饰器

2025-05-08 16:11:41
推荐回答(2个)
回答1:

装饰器是一个函数,下记为函数A。函数A的返回值是

当你调用了一个被装饰器A装饰的函数B时,会将函数B作为变量传入函数A中。函数A最终会返回一个函数,记为函数C。在函数执行时会将变量传入函数C中执行并返回结果。

def a(func):
    def c(*args,**kwargs):
        print(args)
        print(kwargs)
        return func(*args,**kwargs)
    return c
 
@a
def b(*args):
    return sum(args)
 
if __name__ == '__main__':
    print(b)
    # .c at 0x021B7348>
    # 当你调用到函数b时,实际拿到的是将函数b作为参数放入a中执行后返回的函数c
    print(b(*[i for i in range(10)]))
    # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    # {}
    # 45
    # 第一行是函数c打印args的结果
    # 第二行是函数c打印kwargs的结果
    # 第三行是最终print(c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9))的结果

回答2:

简言之,打个比方,我写了一个python的插件,提供给用户使用,但是在使用的过程中我添加了一些功能,可是又不希望用户改变调用的方式,那么该怎么办呢?这个时候就用到了装饰器。
python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。一般而言,我们要想拓展原来函数代码,比较直接的办法就是侵入代码里面修改。
而且装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,不懂就太说不过去啦。
讲完装饰器,相信大家对于Python的发展前景也比较感兴趣,随着人工智能的发展,Python作为人工智能的首选语言,自然也是发展得如火如荼。现在入行,肯定是一个好时机!