网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

python的装饰器怎么用

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

我们提供的服务有:成都做网站、成都网站设计、微信公众号开发、网站优化、网站认证、武安ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的武安网站制作公司

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的装饰器怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享标题:python的装饰器怎么用
文章来源:http://bjjierui.cn/article/jedodj.html

其他资讯