安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Python进阶精华编写装饰器为被包装的函数添加参数

7月23日 话藏心投稿
  此方法主要目的就是为了给被包装函数添加额外参数:实例如下:fromfunctoolsimportwrapsdefoptiondebug(func):wraps(func)defwrapper(args,debugFalse,kwargs):ifdebug:print(Calling:,func。name)returnfunc(args,kwargs)returnwrapperoptiondebugdefadd(x,y,z):returnxyzprint(add(1,2,3,debugTrue))理解装饰器,实质上就只要理解了下述代码,就不难了:foptiondebug(add)(1,2,3,debugTrue)print(f)
  注意:这种发方法并不是装饰器最常用的功能,但是在降低代码重复上可谓是首屈一指。比如:如果不使用装饰器,上述代码可能会很多:defadd(x,y,z,debugFalse):ifdebug:print(calling:)returnxyzdefsub(x,y,z,debugFalse):ifdebug:print(calling:)returnxyzdefmult(x,y,z,debugFalse):ifdebug:print(calling:)returnxyz等等诸多函数,都需要一个一个的去设置debug的情况,而有了装饰器,这些内容仅仅需要写一次就可以在很多函数中使用。
  当然,这里也有一个潜在的风险,就是当装饰器包裹的函数已经用了debug作为参数名,那么装饰器这里将会报错,所以要添加额外的一些判断来完善代码:fromfunctoolsimportwrapsimportinspectdefoptiondebug(func):ifdebugininspect。getargspec(func)。args:raiseTypeError(debugargumentalreadydefined)wraps(func)defwrapper(args,debugFalse,kwargs):ifdebug:print(Calling:,func。name)returnfunc(args,kwargs)returnwrapperoptiondebugdefadd(x,y,debug):returnxy,debugprint(1,2,True)会出现如下异常:Traceback(mostrecentcalllast):FileF:PycharmProjectsclassobjclassone。py,line962,inmoduleoptiondebugFileF:PycharmProjectsclassobjclassone。py,line954,inoptiondebugraiseTypeError(debugargumentalreadydefined)TypeError:debugargumentalreadydefined(该参数已经被在装饰器中定义了,不能重复定义)Processfinishedwithexitcode1
  最后还剩下一部分比较难理解的地方,我将理解的注释在每行代码上方,这个问题就是,在打印被修饰函数的参数签名时,其实并不能正确显示参数签名,原因是因为被wrapper修饰过后的函数实际上应该使用的是wrapper的参数签名表,例如:optiondebugdefadd(x,y):returnxyprint(inspect。signature(add))(x,y)实际上应该是(x,y,,debugFalse)
  所以,接下来,完成最后最难的一步:fromfunctoolsimportwrapsimportinspectdefoptiondebug(func):ifdebugininspect。getargspec(func)。args:raiseTypeError(debugargumentalreadydefined)wraps(func)defwrapper(args,debugFalse,kwargs):ifdebug:print(Calling:,func。name)returnfunc(args,kwargs)获取修饰的函数的参数签名表并且返回一个有序字典(顺序依照实际函数参数顺序)对象这个字典本质上是有一个存放了元组(元组中存放的是参数名和参数地址两个属性)的列表通过Orderdict转化而来siginspect。signature(func)signature允许我们从函数中抽取参数签名出来parmslist(sig。parameters。values())将参数信息表的值列表化sig。paramenters实际就是字典,通过键(参数名)可以找到该参数所有的属性例如下一行中:parms。append(inspect。Parameter(debug,kindinspect。Parameter。KEYWORDONLY,defaultFalse))追加一个新的参数信息进去wrapper。signaturesig。replace(parametersparms)替换原有参数信息,并且修改wrapper的参数签名表returnwrapperoptiondebugdefadd(x,y):returnxyprint(inspect。signature(add))(x,y,,debugFalse)
投诉 评论 转载

黄仁勋终究难成乔布斯一个属于黄仁勋的时代还没开始就迎来了落幕。2月8日,英伟达和软银集团双双宣布,英伟达对Arm的收购交易终止。至此,这场为时一年多的芯片行业最大规模收购案以失败告终。……FastAPI接口限流今天分享接口限流。如果没有接口限流,可能会导致服务器负载不平衡,暴力破解密码,恶意请求,导致服务器额外费用,拒绝服务攻击等。因此做好接口限流很有必要。怎么做接……Python进阶精华编写装饰器为被包装的函数添加参数此方法主要目的就是为了给被包装函数添加额外参数:实例如下:fromfunctoolsimportwrapsdefoptiondebug(func):wraps(func)def……5月汽车公司市值榜特斯拉市值约蒸发一个通用汽车宁德时代成新万每经记者:孙桐桐黄辛旭每经编辑:孙磊5月,汽车股板块整体延续了4月的增长势头。据《每日经济新闻》记者不完全统计,5月,74家汽车类上市公司(涵盖16家跨国整车企业、……鸿蒙系统何去何从?由于美国特朗普政府封锁,华为已经失去了麒麟芯片的代工,华为的销量一路下降,虽然我们不愿意看到,但是事实就是如此残酷,没想到华为这样悲壮的告别手机领域,不过华为及时推出鸿蒙系统,……被美国政府逼死的天才黑客的一生从万维网诞生的第一天起,发明者蒂姆伯纳斯李就做出了免费向所有人开放的决定,从此,互联网带上了开放、共享、自由的乌托邦色彩。然而,互联网的自由开放并没有随着蒂姆伯纳斯李的意……消费曝光台丨五千多元手包运输途中损坏,京东正协商赔偿实习生刘晓宇澎湃新闻记者吕新文近日,浙江杭州的施先生向澎湃质量报告投诉平台(https:tousu。thepaper。cn)反映,他今年10月30日使用京东提供的奢侈品售……F1赛车手通过苹果查找我的追踪盗窃AirPods耳机的小偷IT之家5月25日消息,据AppleInsider报道,在周一被抢劫后,一级方程式赛车手SebastianVettel试图取回他的财物,并使用FindMy(查找我的)应用程序追……华为出售荣耀,你怎么看?华为出售荣耀,实属无奈,对华为而言,先解决生存问题再解决尊严问题1、美国持续打压下,华为芯片供应链吃紧,自造芯片需要时间,出售荣耀可以让华为自身的手机芯片供应链有所缓解,……刻不容缓!市值蒸发千亿,留给拼多多的时间不多了拼多多半年股价跌幅50,市值蒸发千亿有这样的一些公司,它们一直亏损,想要用补贴的方式来获得用户规模。但最终他们还是要想办法让市场看到,他们可以通过创造价值来实现盈利。……为什么近几年勒索软件攻击激增?如何防范它目前我们正在与两种流行病毒作斗争冠状病毒和勒索软件攻击。两者都会影响到部分经济,前者肉眼可见,后者则普通人不可遇见。然而,就网络安全而言,现在我们的安全防范意识,让黑客们有了一……心有猛虎,细嗅蔷薇DC评乾龙盛QA390LE每个人的心中都有一只猛虎。我们或许为了家人的幸福整日奔波劳碌,亦或是为了自己的未来终日埋头苦读。如若这头猛虎不够强壮坚韧,也无法支撑着我们走过数年光阴。但至刚则易折。也许在某个……
安装远程家用高清摄像机有什么好处几百的助听器太吵了有解决办法吗?让人一见倾心的无缝双屏画面哪里寻?飞利浦499P9H1显示器一加Nord2将首发联发科天玑1200AISoC小红书被曝整体裁员20官方暂未作出回应从会上云到用好云,数字化转型这样提速人类还在进化?三成新生儿已经发生改变!进化论是真的吗?超高清产业发展计划落地2022年4K电视终端将全面普及币圈亟待监管画圈人民锐见iPadPro2021和iPadPro2020该选谁?传特斯拉将在今年下半年开始生产Cybertruck20227input()函数支付宝是如何根据2017年度账单预测2018年关键词的染完头发可以用椰子油吗最美新娘盘发成全场最惊艳滾石读后感精选金砖国家机制将推动全球变革黄油是什么油居家瘦是如何依托互联网发展起来的?科技发展给服务业带来的机遇麝香可以用什么代替妻子的精明颜蔻美容护肤助阵你与地心引力的火热Battle雕琢冻龄肌一个美丽的谎言有感于学生完成月亮的心愿实践作业读书的感觉真好

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利