python的装饰器怎么用

发布时间:2022-01-13 09:34:25 作者:iii
来源:亿速云 阅读:160

这篇文章主要讲解了“python的装饰器怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python的装饰器怎么用”吧!

1、实现a+b的功能

def A(a, b):    print(a + b)    return a + bif __name__ == "__main__":    A(1, 2)

2、现在我想函数A不变的情况下,实现a+2+b*2的功能  -- 函数带参数或者参数数量不确定

def B(fun):    def C(*args):        a = args[0]+2        b = args[1]*2        return fun(a,b)    return C@Bdef A(a, b):    print(a + b)    return a + bif __name__ == "__main__":    A(1, 2)   输出结果:7

(1)在main函数运行A(1,2)时,先进入装饰器B中,并将a/b参数传给*args(这里args可表示不限数量的变量输入);在对参数a/b进行修改后,最后进入A函数进行 计算。

(2)函数B的入参是 fun,函数C的入参是 args,对应的实际值即为A(),(a,b)

3、在添加装饰器后,又想继续使用原函数功能 -- 装饰器带参数

def D(flag):    def B(fun):        def C(*args):            if flag:                a = args[0]+2                b = args[1]*2                return fun(a, b)            else:                return fun(*args)        return C    return B
@D(flag=False)def A(a, b):    print(a + b)    return a + b

if __name__ == "__main__":    A(1, 2)
输出结果:3

通过flag字段的判断,可以实现A()原功能或者A的增加功能。

这里要注意下,在原装饰器B函数外面又加了一层函数D,为 了加深印象,可 以这样理解:

D是为 了flag参数的,B是为了A()的,C是为了a/b参数的。对应的顺序是基于flag/A/ab的上下文决定。

4、在写完函数D后,发现又想 加新功能,怎么办? -- 装饰器叠罗汉。

# coding=utf-8# @Auther : "鹏哥贼优秀"# @Date : 2019/10/24# @Software : PyCharmdef D(flag):    def B(fun):        def C(*args):            print("我是D 装饰器")            print("当前输入值内容变为:", *args)            if flag:                a = args[0] + 2                b = args[1] * 2                return fun(a, b)            else:                return fun(*args)        return C    return B
def E(fun):    def F(*args):        print("我是E 装饰器")        print("当前输入值内容变为:",*args)        a = args[0] + 10        b = args[1] + 10        return fun(a, b)    return F
@D(flag=True)@Edef A(a, b):    print(a + b)    return a + b
if __name__ == "__main__":    A(1, 2)
输出结果是:我是D 装饰器当前输入值内容变为:1 2我是E 装饰器当前输入值内容变为:3 427

当出现多个装饰器,按顺序分别进行对应功能的计算,因此根据以上示例代码,先进行装饰器D的计算,将a/b变为3/4;然后进入装饰器E的计算,将a/b变为了13/14,最后进入A()函数,并输出27。

感谢各位的阅读,以上就是“python的装饰器怎么用”的内容了,经过本文的学习后,相信大家对python的装饰器怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. python装饰器的原理--装饰器过程
  2. Python中装饰器怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何优化定时任务与feign超时的纠葛

下一篇:Python怎么从GUI界面加载并显示图片

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》