让计算机等待的函数_第56p,装饰器,闭包函数的应用

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

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

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

8a1a71200afbf7abcf0133bc52c05089.png

一、装饰器介绍

1、什么是装饰器?

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

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

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

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

142e2d2609731bc7b7dd9cd8536f09f9.png

3、装饰器的作用

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

即:

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

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

c17ab7b2f93d9baaa8dc4aea1c7bd86f.png

二、无参装饰器

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

【def inner(fun):

Def wrapper(*args,**kwargs):

Res = fun(*args,**kwargs)

Return res

Return wrapper】

代码效果如图:

bcce02dd2342c45c64402d6707ce26d1.png

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

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

cf89c1734357e72273a3b7f58cd615f5.png

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

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

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

f7ffa1774846977938d05cecd4cee6e6.png

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

ce1f24eb4f20777036fa7362d135ac65.png

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值