专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Python装饰器的细化讲解

  我叫骆驼
  会点儿代码,会点儿读书
  这世上的书浩如烟海
  我能做的就是尽量整理分享给你起
  在上一节Flask项目实战第一弹中我们讲到了路由,先看下面代码回顾一下:fromflaskimportFlaskappFlask(name)app。route(hello)defhello():returnpHelloWorld。。。ifnamemain:app。run(loaddotenvTrue)
  app。route(hello)就是装饰器。交流群里小伙伴问我,Python里的装饰器该怎么理解,今天我们好好唠唠这个东西。承
  说到装饰器,我们不得不谈一个知识点:闭包。我们从代码入手,一点一点来说闭包。
  Python有一个好玩的地儿,就是def函数(exterior)内部可以嵌套另一个def函数(interior)。调用exterior时,若遇到interior,仅仅完成对于interior的定义,而不去运行interior。如果exteriorreturninterior,那么我们可以使用interior()去调用内部函数interior函数。var0defexterior():var1definterior():print(var)returninterior()这里返回interior函数调用结果exterior()打印1
  从上面代码和结果中可以看到,interior打印的var值并非第一行的var。这说明,exterior中的嵌套变量var覆盖了全局变量var0,然后interior中的本地变量按照引用规则,就引用了var1。
  接下来,我们仔细想想下面这句话:
  interior作用域在函数结束后就立即失效,而exterior嵌套作用域在interior的函数返回后却仍然有效。var0defexterior():var1definterior():print(var)returninterior这里返回interior函数对象interexterior()inter()打印1
  看完上面代码,再思考一下刚刚的话。如果还不清楚,看下图:
  图解
  创建一个闭包必须满足以下几点:必须有一个内嵌函数内嵌函数必须引用外部函数中的变量外部函数的返回值必须是内嵌函数转
  现在有了闭包的知识点,我们再聊聊装饰器(decorator)。我要掰开了揉碎了来说说装饰器。
  刚刚接触装饰器的同学会对这个概念感到迷茫,然后你在网上(尤其csdn)找例子或者教程,基本千篇一律,或者讲解的点到为止,你在看完之后,或许更迷茫了。
  函数是什么
  在说装饰器前,我们聊聊Python的函数。众所周知:在Python中,一切皆对象,函数是一等对象。
  编程语言理论家把一等对象定义为满足下述条件的程序实体:在运行时创建能赋值给变量或者数据结构中的元素能作为参数传递给函数能作为函数的返回结果
  我们看这么一段程序:defdouble(x:int)int:returnx2
  这段代码很简单,计算了一个整数的2倍。那么我么用dis模块进行反编译,看看他是怎么运行的。frommytestimportdoublefromdisimportdisdis(double)结果如下
  源码行号
  指令在函数中的偏移
  指令符号
  指令参数
  实际参数值
  2hr0hrLOADFAST
  0hrx
  2hrLOADCONST
  1hr2hr4hrBINARYMULTIRLY
  6hrRETURNVALUE
  指令符号解释:LOADFAST:一般加载局部变量的值,也就是读取值,用于计算或者函数调用传参等;LOADCONST:加载const变量,比如数值、字符串等等;BINARYMULTIRLY:见名知意,二进制乘法RETURNVALUE:返回值
  结合反编译的结果,仔细理解一下代码的运行流程。下面我们看另外一个例子:defdouble(x:int)int:returnx2deftriple(x:int)int:returnx3defcallfunc(func,x:int)int:returnfunc(x)resultcallfunc(triple,2)print(result)dis(callfunc)
  源码行号
  指令在函数中的偏移
  指令符号
  指令参数
  实际参数值
  10hr0hrLOADFAST
  0hrfunc
  2hrLOADFAST
  1hrx
  4hrCALLFUNCTION
  1hr6hrRETURNVALUE
  在运行过程中:出现了CALLFUNCTION。结合第13行代码,仔细体会一下这句话:函数能作为参数传递给另外一个函数。
  我们现在看一下闭包的执行流程defcallfunc():defdouble(x:int)int:returnx2returndouble
  dis(callfunc)
  里边出现了一个关键词:MAKEFUNCTION,见名知意,创建函数。此时再回想一等对象所满足的条件。
  说了这么多,无非是想告诉大家一个重要的东西,函数就是对象,可以被另一个函数返回,可以被赋值,也可以被调用。
  其实到这里,才真是说完闭包这个东西。装饰器和闭包大同小异,下面我们接着来。
  装饰器
  有这种一种等价语法:defcallfunc(func):return1callfuncdeftriple(x:int)int:returnx3
  等价于defcallfunc(func):return1deftriple(x:int)int:returnx3triplecallfunc(triple)
  无论上面那种方式,我们输出的tripre这个对象的值都是1print(triple)1
  所以,闭包可以写成这种形式呢?其实,装饰器可以理解为闭包的一种,我们可以这样认为:闭包传递的是变量,而装饰器传递的是函数,除此之外没有任何区别。
  我们看一个打印时间的装饰器:importtimedeftimeit(func):defwrapper(x):starttime。time()retfunc(x)print(time。time()start)returnretreturnwrappertimeitdefmyfunc(x):time。sleep(x)myfunc(1)
  timeit装饰器就打印myfunc函数的运行时间。是不是在了解完闭包之后很简单了。
  装饰器的作用就是:在不改变原函数的情况下,对已有函数进行额外的功能扩展。
  恭喜你,Python技能又进一步。
  回到Flask我们看看路由装饰器
  Flask中路由的装饰器很简单,我们以route为例,以下是route函数源码(抽离版):importtypingastdefaddurlrule(rule,endpoint,f,param):passdefroute(rule:str,options:t。Any)t。Callable:defdecorator(f:t。Callable)t。Callable:endpointoptions。pop(endpoint,None)addurlrule(rule,endpoint,f,options)returnfreturndecorator
  route函数就是一个装饰器,内部嗲用addurlrule实现真正的路由添加。再回过头看看装饰器的作用和定义以及使用,是不是明白了许多!加油,慢就快,快就是慢。合
  我整理了自学Python的视频,涉及到爬虫、Web、数据分析、机器学习和深度学习等内容,留言转发并后台发送:你好,Python,就可以免费获取啦!
  爬虫
  我也是从大学一路自学走来的,深知自学的情况下,没有项目是多么的难受。现在免费赠送python项目实战,后台私聊即可获得。
  最后,动动手点个赞,您的支持是我创作的最大动力〔比心〕

不要看见别人发光,就觉得自己暗淡,否定自己的选择看到读书群分享千万不要看见别人发光,就觉得自己暗淡!很有感触。讲到生活中人和人的节奏不一样!有人三分钟泡面,有人一小时煲汤。你选择了你要的方式就坚定走下去,别胡思乱想!阳光少女,心帽爷头条创作挑战赛九十四岁的帽爷,老伴走的早,虽然膝下四男双女,儿孙满堂一大片,可他老人家偏偏一直坚守着独守一人过日子。就这样不但不拖累家人,还时不时的给小字辈们点补贴,那日子过得就是静下心来读书,它会一点一滴地滋养你1hr为什么要读书?很多时候,我们之所以陷于痛苦,烦恼不断,根源就是读书太少,囿于有限的学识和认知,没有足够的智慧来解决生活中的难题。读一书,增一智。阅读,才是最好的疗心良药,是真想日常生活中我们是如何进行思考的?想你想对了什么,想错了什么,英尼基海斯著,姚瑞元译,人民邮电出版社,2022年11月。我们大部分思考过程是没有意识的当我们说某人不能一边走路一边嚼口香糖时,这其实是一个由来已久的侮让自己保持优秀的5个习惯树立有意义的目标比起着急赶路,更重要的是先做好充足的准备,制定好缜密的计划。一个目标清晰的人,在前进的路上往往不会迷失方向。试试给自己设定一个有意义且实际的目标吧。找准目标,踏踏实五十岁以后,越能忍的人,往往越有福!年过半百之后,很多该经历的事情我们也都经历过了。慢慢的看人看事都渐渐通透,过去的激进也逐渐转变成了平和。以前无法放下的事情,现在也渐渐的看开放下了。这就是来自于心灵深处的成长,非常男人老了的标准是什么?1老男人最显著的特点就是贪财怕死。活了几十年了,经历过太多的事情,老男人明白了,只有钱和健康是最靠得住的。他知道钱能够解决90以上的问题,他也知道,只有健康的身体才能够让他享受生活父子俩的第56场马拉松,打卡完毕!来源央视新闻今天(19日)上午,深圳马拉松赛场上,一对父子的身影吸引了很多人的目光。来自浙江金华的罗书坚用三轮手推车推着儿子小柏,完成他们的第56场马拉松旅程。约21公里的半程马拉中美芯片公司科技战,美国限制芯片出口!华盛顿最新的出口限制禁止美国人支持目标中国公司的开发或生产芯片受影响公司的几位高管曾在美国半导体行业工作,并在返回中国之前获得了公民身份美国对中国芯片公司的新限制可能会使目标公司的连州市卫健局开展院前急救医疗质评工作日前,连州市卫生健康局组织120急救指挥中心,对市区4家急救网络医院开展院前急救医疗质量考核工作,进一步提升院前急救综合服务能力,促进连州市院前急救医疗工作的同质化发展。本次考核主新视野丨博爱卫生站助力农村医疗服务石榴云新疆日报记者于熙基层医疗网底,事关群众福祉,人民安康。新春伊始,中共中央国务院发布关于做好2023年全面推进乡村振兴重点工作的意见,提出推进医疗卫生资源县域统筹,加强乡村两级
男人心里深爱着你,才会有这些舍不得文森屿鹿林爱一个人,不免担心自己会真心错付,遇人不淑。你害怕对方对自己的爱不够真诚,所以会忍不住将对方试探,在感情里患得患失。在还没有确定对方的想法之前,你总是担忧自己的付出会被人浅谈智能照明系统在智能建筑中应用与产品选型安科瑞王丹丹acrel2021摘要目前来说,科学技术迅猛发展,并很大的改变了人们的生活。随着智能化技术的出现,照明控制系统更加体现出智能化特点,可以充分利用人工和自动化控制进行有机中国房地产市场的长期需求测算(上)核心观点根据我们的预测结果,20222035年,中国新增商品房需求将呈现L型的回落趋势20222025年,新增商品房的需求中枢约为11。3亿平方米,20262030年约为9。6亿平第三届流动中国公益宣传活动圆满收官第三届流动中国公益宣传活动圆满收官。流动中国主办方供图敬儒党的二十大报告提出,要坚持把发展经济的着力点放在实体经济上。物流业作为实体经济中的典型,在国民经济发展中发挥着基础性战略性全国高速公路货车通行714。09万辆环比增长13。14央视网消息监测汇总数据显示,10月24日,国家铁路货运继续保持高位运行,运输货物1027。6万吨,环比增长0。29。全国高速公路货车通行714。09万辆,环比增长13。14。监测港美媒世界工业机器人数量迅速扩张据美国华尔街日报网站10月15日报道,新一波机器人正在到来在一个缺少劳动力的世界,企业领导人比以往任何时候都更热切地欢迎它们。报道称,雇主人手紧张技术飞跃和成本效益的提高促使世界机CCTV5直播,大连人战略放弃?谢晖全华班试水三镇5外援满血复活CCTV5直播,大连人战略放弃?谢晖全华班试水,三镇5外援满血复活北京时间10月25日1930,大连人客场迎战武汉三镇,央视CCTV5直播,这是一场迟来的比赛,是中超第19轮的补赛2022专精特新小巨人企业科创能力报告授权发明专利总量超15万件科创板小巨人占比最高黄一灵中国证券报中证网中证网讯(记者黄一灵)10月24日,科技创新信息服务商智慧芽旗下智慧芽创新研究中心发布2022专精特新小巨人企业科创能力报告(以下简称报告)。报告梳理了我国自诗词丨陈安国今朝美,多少英雄泪,阅尽千年沁园春中华颂中华泱茫,草木葳蕤,德贯九天。看北国晴好,南湖潋滟,西陲辽阔,东海桑田。峡谷喧嚣,嫦娥问月,又见蛟龙入碧渊。今朝美,多少英雄泪,阅尽千年。曾经星火燎原。斩旧世才得昌盛颜续航里程401km,兼具快充能力当前,随着国家生育政策的逐步开放,加之消费持续升级,用户对于车辆的用车品质感正不断提出更高的要求。来到商务MPV的细分市场,随着用车场景增加,宜商宜家逐渐成为购车关键词。有着MPV拥有温泉证书的温泉池,必泡,臻品房3人温泉票自助水果仅368这个秋冬季节去哪玩!天气渐凉不如来一场温泉之旅!远离尘世喧嚣,肆意怀抱大自然珠三角黄金度假圈1h即达适合短期出行度假,轻松往返老少皆宜,嗨享假日来清远银盏温泉度假村爽泡一个以露天温
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网