栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python闭包和装饰器示例详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python闭包和装饰器示例详解

一 ,闭包的三个条件:

1.一个函数内部嵌套另外一个函数;
2.内部函数使用了外函数的非全局变量(包括外函数传入的参数);
3.外函数的retune返回的是内函数的函数名;
例:

以上函数就是一个闭包函数,如果内函数使用了变量a,那就不是闭包;

二,闭包的原理:

如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
这个原理非常重要,这就能帮助我们实现装饰器,在不改动原函数的基础上扩展功能;

三,装饰器的作用:

我们已经实现了一个index函数返回网站首页,但是我们后面新加一个需求是在返回首页之前让用户先登录,那我们就可以写一个装饰器login,再在原函数上加一个帽子@login就实现了原功能的扩展,并且没有修改原函数,这里可以引入一个概念,开放封闭原则;
开放封闭原则(Open-Closed Principle):一个软件实体应当对扩展开放(open),则修改关闭(不修改原来的代码这就是closed)。在设计一个模块时,应当使得这个模块可以在不被修改的前提下被扩展。
装饰器是将原来的函数当参数传到外函数,内函数实现扩展功能;

结果:

四,普通装饰器:

不带参数的装饰器,(原函数没有参数)如下

以上装饰器是一个函数运行计时的,原函数没有参数;

五,带参数的装饰器:

原函数带参数,那我们的装饰器函数也需要传参;如下

六,通用装饰器:

如下我们把装饰器的参数改为不定长参数,那么不管原函数有几个参数或者没有参数,我们的装饰器都是通用的,如下:

七,通过类来实现装饰器

1.函数实现装饰器,是把原函数当做函数传参传递,那么类装饰器接收参数的话就得用__init__接收;
2.类实现装饰器,需要依赖__call__方法,前后下划线的方法在python中被称为魔术方法,是一类不需要主动调用,只在触发的时候自动执行的方法,那call方法就是在当类被调用的时候会自动执行,依赖这个原理,我们可以实现类装饰器;如下:

八,python自带的三个装饰器

其中2和3两个装饰器在类和对象的的时候应该使用过,就不做过多介绍了

特性装饰器:@property  
类方法装饰器: @classmethod   
静态方法装饰器:@staticmethod

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号