首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第56p,装饰器,闭包函数的应用

大家好,我是杨数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原创,欢迎关注,带你一起长知识。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200731A0K1I900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券