大家好,我是杨数Tos,这是《从零基础到大神》系列课程的第56篇文章,第三阶段的课程:Python进阶知识:Python进阶知识:详细讲解Python中的函数(九)====> 函数的嵌套之装饰器详解(上篇)。
函数是非常重要的内容,在这里,我会用10篇左右的文章详细讲解Python中函数定义与使用的规则。
阅读提醒:建议小白先看一遍:【计算机基础知识】和【Python基础知识】课程,否则你不一定听得懂!
一、装饰器介绍
1、什么是装饰器?
装饰指的是为其他函数添加功能;装饰器就是闭包函数,装饰器就是闭包函数的一种运用方式。
2、装饰器的开放封闭原则:
开放:指的是对扩展功能是开放的,在原代码不变动的基础上,对其添加功能;
封闭:指的是对修改源代码是封闭的;一段源代码,如果它的功能没有改的需求,就不要对原来的代码做出任何的变动;最好写一个新的函数,专门为其添加新功能,这就是装饰器;
3、装饰器的作用
为了更好的用户体验(不停服更新),如果你要添加新功能,在不修改原来的代码,不改变原来的调用方式,为当前功能添加新的方法或功能;
即:
装饰器就是在不修改原代码以及调用方式的情况下,为原代码添加新功能的方式。
例如:程序设计者开发了一个功能,然后对该功能进行了更新;使用者不用等待停服更新,且更新了新的功能后,也不会变动原来的使用方式,却添加了新的功能;这就是装饰器的应用。
二、无参装饰器
1、一个简单的无参装饰器的模板
【def inner(fun):
Def wrapper(*args,**kwargs):
Res = fun(*args,**kwargs)
Return res
Return wrapper】
代码效果如图:
2、装饰器的运行过程解析
看这两代码:
fun = inner(fun)
fun(11,22)
这一行代码:fun = inner(fun),表示:
1.将inner这个函数的返回值,赋值给新的变量fun;(变量的赋值与引用知识点)
2.而inner这个函数中传入的参数fun,表示的是将前面的函数fun当作参数传入进去;(函数对象相关知识点)
3.所以,fun = inner(fun)这行代码,就相当于fun = inner的返回值;fun = inner(fun)这行代码最后的结果应该是,wrapper这个函数名的内存地址;即:fun = wrapper 。
4.而fun(11,22)这一行代码,表示执行wrapper这个函数,而wrapper这个函数的返回值是res,而res这个返回值等于:Res = fun(*args,**kwargs);
5.而fun(*args,**kwargs)表示的是fun(x,y),实例化结果为:fun(11,22),在fun这个函数中执行的是打印x和y的值的操作;
所以最终的结果明白了吗?
这个装饰器的执行就相当于下面的代码:
【print("调用装饰器了");
调用fun函数,并将11和22分别传给形参x和y,并打印x和y的值。】
看到这里,前面的代码只是添加一点功能,却写了这么多行的代码,不是多余吗?其实,在真实的应用场景,我们需要添加的功能肯定会很复杂,往往是不止一个地方要添加一个相同的新功能;装饰器就相当于一个新功能的模板,哪里需要使用它,只需调用就可以了;完全不用管装饰器内部是如何实现的;这也是一种面向对象的思维方式。
以上是本期内容,如果有表达不对的内容,欢迎您的留言、斧正,我们一起天天向上。
感谢您的阅读,您的三连【关注、点赞、收藏】就是对我最大的支持,谢谢!
本文由杨数Tos原创,欢迎关注,带你一起长知识。
领取专属 10元无门槛券
私享最新 技术干货