wislink交换机配置手册(第56p装饰器闭包函数的应用)

大家好,我是杨数Tos,这是《从零基础到大神》系列课程的第56篇文章,第三阶段的课程:Python进阶知识:Python进阶知识:详细讲解Python中的函数(九)====> 函数的嵌套之装饰器详解(上篇)。

函数是非常重要的内容,在这里,我会用10篇左右的文章详细讲解Python中函数定义与使用的规则。

阅读提醒:建议小白先看一遍:【计算机基础知识】和【Python基础知识】课程,否则你不一定听得懂!

wislink交换机配置手册(第56p装饰器闭包函数的应用)(1)

一、装饰器介绍

1、什么是装饰器?

装饰指的是为其他函数添加功能;装饰器就是闭包函数,装饰器就是闭包函数的一种运用方式。

wislink交换机配置手册(第56p装饰器闭包函数的应用)(2)

2、装饰器的开放封闭原则:

开放:指的是对扩展功能是开放的,在原代码不变动的基础上,对其添加功能;

封闭:指的是对修改源代码是封闭的;一段源代码,如果它的功能没有改的需求,就不要对原来的代码做出任何的变动;最好写一个新的函数,专门为其添加新功能,这就是装饰器;

wislink交换机配置手册(第56p装饰器闭包函数的应用)(3)

3、装饰器的作用

为了更好的用户体验(不停服更新),如果你要添加新功能,在不修改原来的代码,不改变原来的调用方式,为当前功能添加新的方法或功能;

即:

装饰器就是在不修改原代码以及调用方式的情况下,为原代码添加新功能的方式。

例如:程序设计者开发了一个功能,然后对该功能进行了更新;使用者不用等待停服更新,且更新了新的功能后,也不会变动原来的使用方式,却添加了新的功能;这就是装饰器的应用。

wislink交换机配置手册(第56p装饰器闭包函数的应用)(4)

二、无参装饰器

1、一个简单的无参装饰器的模板

【def inner(fun):

Def wrapper(*args,**kwargs):

Res = fun(*args,**kwargs)

Return res

Return wrapper 】

代码效果如图:

wislink交换机配置手册(第56p装饰器闭包函数的应用)(5)

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的值的操作;

所以最终的结果明白了吗?

wislink交换机配置手册(第56p装饰器闭包函数的应用)(6)

这个装饰器的执行就相当于下面的代码:

【print("调用装饰器了");

调用fun函数,并将11和22分别传给形参x和y,并打印x和y的值。】

wislink交换机配置手册(第56p装饰器闭包函数的应用)(7)

看到这里,前面的代码只是添加一点功能,却写了这么多行的代码,不是多余吗?其实,在真实的应用场景,我们需要添加的功能肯定会很复杂,往往是不止一个地方要添加一个相同的新功能;装饰器就相当于一个新功能的模板,哪里需要使用它,只需调用就可以了;完全不用管装饰器内部是如何实现的;这也是一种面向对象的思维方式。

wislink交换机配置手册(第56p装饰器闭包函数的应用)(8)

以上是本期内容,如果有表达不对的内容,欢迎您的留言、斧正,我们一起天天向上。

感谢您的阅读,您的三连【关注、点赞、收藏】就是对我最大的支持,谢谢!

本文由杨数Tos原创,欢迎关注,带你一起长知识。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页