【python】闭包与装饰器

# 本次讲述的知识点也是非常重要的(严肃脸)

# 先有的闭包,之后才生成了装饰器,同样的也是非常简单的东西。


# 闭包

结构组成;


闭包

写法;外层函数返回内层函数的引用,外层函数必须要有参数!

作用;执行函数的时候我们可以把外层函数的参数保存在内存中!

# 具体是如何演化成装饰器的呢?

我记得当初学习装饰器的时候,样哥讲装饰器就是表面意思,等于就是在一个事物上添加附加条件的过程,所以装饰器在工作上运用的蛮多的,简单易用!(有点废话~~)

现在我们说说装饰器的演变过程;

1. 我们先定义一个闭包,外层函数set_fun()与内层函数call_fun(),外层函数传入参数func,内层函数调用func(),另外在闭包外创建text()函数,打印text。这个时候我们已经差不多写完了整个程序了,就剩下最后的执行步骤,我们可以先想一个问题,装饰器是来添加附加东西的,所以我们可以简单的在闭包里的内层函数添加一些东西,这里我们就打印“权限”来代表添加的东西(毕竟装饰器的初衷就是如此),接下来我们来使两者联系并且执行起来;

call_fun = set_fun(test)

call_fun() 


源代码截图

这样,整个程序就都联系起来了,运行后会发现在输出的text之上加了一个权限两字,对!就是我们刚刚添加的!棒棒哒!附图;


运行结果

#话说,其实这个时候我们已经完成了装饰器的功能,等等!这还是装饰器的最初形态,我们还可以将其变得更简洁,更好~~~往下翻~


2.  演变第二部,我们只需把执行代码行的call_fun 改成 text~~~~嗯?改变不大?对,是的,改变不大,别慌,我们还有演变最终版呢!这个过渡很重要的; 


演变2

# 功能还是那个功能,结果还是那个结果!这其中其实是有一个指向问题,1中的text指向是call_fun ,而现在这一层指向是经过call_fun后又指向了func,这个时候text()=func(),双层指向更能直观的显示我们的所需要的目的!最终版要来咯~~~


#终版

# 这最终版就叼了,简直瑟瑟发抖~~~哈哈,不皮了~~

#这其中要运用到一个叫做语法糖的东西,顾名思义就是粘住你(这里是函数),在函数前添加 @+闭包外层函数名,就形成了我们最终版的装饰器;

装饰器

#语法糖的出现就减去了一行调用代码,代码优化还是很明显的!之后再执行函数就行了,完全不用管装饰器,已经自动执行了。就如图所示,在函数前加入语法糖就行(@set_fun==》text = set_fun(text)  )

# 到这里,我们就明白了装饰器的功能的同时,又理解了其中的调用过程,没有什么技术性的东西,全都是一些固定的用法,所以我们就可以做一个万能装饰器,完全不用我们去我们编写装饰器那种,嘿嘿;


万能装饰器

#一般来说,装饰器涉及了很多种情况;

# 装饰我们的函数分为四组情况

#  1. 无参,无返回

#  2. 无参,有返回

#  3. 有参,无返回

#  4. 有参,有返回

而且,在道德上我们是不会更改函数的值和调用方式的,以上四种情况我在这就不说明了,别人应该写的比我更好,本次只是简述了闭包和装饰器的生成过程!


# 总结;

生命有限,重在珍惜!时间更是越用越少,学习成为生命有意义的体现,更多的是满足自己的精神世界,每天分享的东西不多,但只要一直学习,便不会孤独!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • python万物皆对象! 闭包 闭包:两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定有参数 def 外部...
    风舞柏杨阅读 780评论 2 0
  • 闭包 1.函数引用 运行结果: 2.什么是闭包 运行结果: 3.重讲闭包 内部函数对外部函数作用域里变量的引用(非...
    墨痕hz阅读 1,525评论 0 4
  • 运行结果如下: 闭包的定义:在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一...
    魔法高校的劣等生阅读 518评论 0 0
  • 闭包 总共三句话:1、在一个外函数中定义了一个内函数2、内函数里运用了外函数的临时变量3、外函数的返回值是内函数的...
    BlueCat2016阅读 186评论 0 0
  • 函数 什么是函数? 将具有某种功能的代码放到一起, 构成一个函数.为什么说函数? 因为需要研究一个问题, 函数可以...
    DragonFangQy阅读 915评论 0 2