重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了“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 : PyCharm
def 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)
@E
def A(a, b):
print(a + b)
return a + b
if __name__ == "__main__":
A(1, 2)
输出结果是:
我是D 装饰器
当前输入值内容变为:1 2
我是E 装饰器
当前输入值内容变为:3 4
27
当出现多个装饰器,按顺序分别进行对应功能的计算,因此根据以上示例代码,先进行装饰器D的计算,将a/b变为3/4;然后进入装饰器E的计算,将a/b变为了13/14,最后进入A()函数,并输出27。
感谢各位的阅读,以上就是“python的装饰器怎么用”的内容了,经过本文的学习后,相信大家对python的装饰器怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!