位置: IT常识 - 正文

九步就可入门Python装饰器(九步功法)

编辑:rootadmin

推荐整理分享九步就可入门Python装饰器(九步功法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:九步三招,九步功法,九步法是什么,九步舞一步一步教程,九步功法,九步三招,九步法是什么,九步法 百度网盘,内容如对您有帮助,希望把文章链接给更多的朋友!

第一步:最简单的函数,准备附加额外功能

#-*-coding:gbk-*-'''示例1:最简单的函数,表示调用了两次'''defmyfunc():print("myfunc()called.")myfunc()myfunc()

第二步:使用装饰函数在函数执行前和执行后分别附加额外功能

#-*-coding:gbk-*-'''示例2:替换函数(装饰)装饰函数的参数是被装饰的函数对象,返回原函数对象装饰的实质语句:myfunc=deco(myfunc)'''defdeco(func):print("beforemyfunc()called.")func()print("aftermyfunc()called.")returnfuncdefmyfunc():print("myfunc()called.")myfunc=deco(myfunc)myfunc()myfunc()

第三步:使用语法糖@来装饰函数

#-*-coding:gbk-*-'''示例3:使用语法糖@来装饰函数,相当于“myfunc=deco(myfunc)”但发现新函数只在第一次被调用,且原函数多调用了一次'''defdeco(func):print("beforemyfunc()called.")func()print("aftermyfunc()called.")returnfunc@decodefmyfunc():print("myfunc()called.")myfunc()myfunc()九步就可入门Python装饰器(九步功法)

相关推荐:《Python视频教程》

第四步:使用内嵌包装函数来确保每次新函数都被调用

#-*-coding:gbk-*-'''示例4:使用内嵌包装函数来确保每次新函数都被调用,内嵌包装函数的形参和返回值与原函数相同,装饰函数返回内嵌包装函数对象'''defdeco(func):def_deco():print("beforemyfunc()called.")func()print("aftermyfunc()called.")#不需要返回func,实际上应返回原函数的返回值return_deco@decodefmyfunc():print("myfunc()called.")return'ok'myfunc()myfunc()

第五步:对带参数的函数进行装饰

#-*-coding:gbk-*-'''示例5:对带参数的函数进行装饰,内嵌包装函数的形参和返回值与原函数相同,装饰函数返回内嵌包装函数对象'''defdeco(func):def_deco(a,b):print("beforemyfunc()called.")ret=func(a,b)print("aftermyfunc()called.result:%s"%ret)returnretreturn_deco@decodefmyfunc(a,b):print("myfunc(%s,%s)called."%(a,b))returna+bmyfunc(1,2)myfunc(3,4)

第六步:对参数数量不确定的函数进行装饰

#-*-coding:gbk-*-'''示例6:对参数数量不确定的函数进行装饰,参数用(*args,**kwargs),自动适应变参和命名参数'''defdeco(func):def_deco(*args,**kwargs):print("before%scalled."%func.__name__)ret=func(*args,**kwargs)print("after%scalled.result:%s"%(func.__name__,ret))returnretreturn_deco@decodefmyfunc(a,b):print("myfunc(%s,%s)called."%(a,b))returna+b@decodefmyfunc2(a,b,c):print("myfunc2(%s,%s,%s)called."%(a,b,c))returna+b+cmyfunc(1,2)myfunc(3,4)myfunc2(1,2,3)myfunc2(3,4,5)

第七步:让装饰器带参数

#-*-coding:gbk-*-'''示例7:在示例4的基础上,让装饰器带参数,和上一示例相比在外层多了一层包装。装饰函数名实际上应更有意义些'''defdeco(arg):def_deco(func):def__deco():print("before%scalled[%s]."%(func.__name__,arg))func()print("after%scalled[%s]."%(func.__name__,arg))return__decoreturn_deco@deco("mymodule")defmyfunc():print("myfunc()called.")@deco("module2")defmyfunc2():print("myfunc2()called.")myfunc()myfunc2()

第八步:让装饰器带类参数

#-*-coding:gbk-*-'''示例8:装饰器带类参数'''classlocker:def__init__(self):print("locker.__init__()shouldbenotcalled.")@staticmethoddefacquire():print("locker.acquire()called.(这是静态方法)")@staticmethoddefrelease():print("locker.release()called.(不需要对象实例)")defdeco(cls):'''cls必须实现acquire和release静态方法'''def_deco(func):def__deco():print("before%scalled[%s]."%(func.__name__,cls))cls.acquire()try:returnfunc()finally:cls.release()return__decoreturn_deco@deco(locker)defmyfunc():print("myfunc()called.")myfunc()myfunc()

第九步:装饰器带类参数,并分拆公共类到其他py文件中,同时演示了对一个函数应用多个装饰器。

#-*-coding:gbk-*-'''mylocker.py:公共类for示例9.py'''classmylocker:def__init__(self):print("mylocker.__init__()called.")@staticmethoddefacquire():print("mylocker.acquire()called.")@staticmethoddefunlock():print("mylocker.unlock()called.")classlockerex(mylocker):@staticmethoddefacquire():print("lockerex.acquire()called.")@staticmethoddefunlock():print("lockerex.unlock()called.")deflockhelper(cls):'''cls必须实现acquire和release静态方法'''def_deco(func):def__deco(*args,**kwargs):print("before%scalled."%func.__name__)cls.acquire()try:returnfunc(*args,**kwargs)finally:cls.unlock()return__decoreturn_deco#-*-coding:gbk-*-'''示例9:装饰器带类参数,并分拆公共类到其他py文件中同时演示了对一个函数应用多个装饰器'''frommylockerimport*classexample:@lockhelper(mylocker)defmyfunc(self):print("myfunc()called.")@lockhelper(mylocker)@lockhelper(lockerex)defmyfunc2(self,a,b):print("myfunc2()called.")returna+bif__name__=="__main__":a=example()a.myfunc()print(a.myfunc())print(a.myfunc2(1,2))print(a.myfunc2(3,4))

相关推荐:

本文链接地址:https://www.jiuchutong.com/zhishi/310694.html 转载请保留说明!

上一篇:python怎么传送文件(python文件间传递参数)

下一篇:php算法面试题有哪几种(php算法面试题有答案吗)

  • 微信加好友提示操作频繁怎么办(微信加好友提示操作频繁是怎么回事)

    微信加好友提示操作频繁怎么办(微信加好友提示操作频繁是怎么回事)

  • 微信群视频怎么开启(微信群视频怎么撤回)

    微信群视频怎么开启(微信群视频怎么撤回)

  • qq显示电量一直不刷新(为什么qq显示电量一直都是充电中)

    qq显示电量一直不刷新(为什么qq显示电量一直都是充电中)

  • ipad可以用无线鼠标吗(ipad可以用无线充电器吗)

    ipad可以用无线鼠标吗(ipad可以用无线充电器吗)

  • 爱奇艺奇豆和奇点一样吗(爱奇艺奇豆是充会员送的吗)

    爱奇艺奇豆和奇点一样吗(爱奇艺奇豆是充会员送的吗)

  • wsp文档是什么意思(wpa/wep)

    wsp文档是什么意思(wpa/wep)

  • 闲鱼鱼塘怎么突破	500	人(闲鱼上鱼塘)

    闲鱼鱼塘怎么突破 500 人(闲鱼上鱼塘)

  • 腾讯有哪些软件(腾讯有哪些软件可以领礼包)

    腾讯有哪些软件(腾讯有哪些软件可以领礼包)

  • 我的红包记录怎么查(我的红包记录怎么删除不了)

    我的红包记录怎么查(我的红包记录怎么删除不了)

  • 港版note10+支持5g网络吗(港版note10支持指纹支付吗)

    港版note10+支持5g网络吗(港版note10支持指纹支付吗)

  • 华为mate30后盖什么材质(华为mate30后盖多少钱换一个)

    华为mate30后盖什么材质(华为mate30后盖多少钱换一个)

  • 苹果系统不能下载小红书了吗

    苹果系统不能下载小红书了吗

  • 华为nova5手机进水保修吗(华为nova5手机进水还能用不)

    华为nova5手机进水保修吗(华为nova5手机进水还能用不)

  • 进程有哪些基本状态(进程有哪些基本状态,画出进程)

    进程有哪些基本状态(进程有哪些基本状态,画出进程)

  • wifi恢复出厂设置后为什么不能用了(wifi恢复出厂设置后密码是多少)

    wifi恢复出厂设置后为什么不能用了(wifi恢复出厂设置后密码是多少)

  • ios11截图编辑怎么关闭(苹果手机截屏后的编辑功能怎么设置)

    ios11截图编辑怎么关闭(苹果手机截屏后的编辑功能怎么设置)

  • 嗨siri关闭旁白是什么意思(嗨 siri打开旁白会怎么样)

    嗨siri关闭旁白是什么意思(嗨 siri打开旁白会怎么样)

  • iphone怎么加密相册(苹果如何加密手机相册)

    iphone怎么加密相册(苹果如何加密手机相册)

  • 苹果xsmax怎么微信美颜(苹果xsmax怎么微信加密)

    苹果xsmax怎么微信美颜(苹果xsmax怎么微信加密)

  • airpods二代和一代的外观(AirPods二代和一代音质)

    airpods二代和一代的外观(AirPods二代和一代音质)

  • 微信能发动图吗(微信可以发动图么)

    微信能发动图吗(微信可以发动图么)

  • 微信号能查出真实人吗(微信号可以查出)

    微信号能查出真实人吗(微信号可以查出)

  • 苹果max黑屏自动转圈圈(iphone黑屏自动关机怎么回事)

    苹果max黑屏自动转圈圈(iphone黑屏自动关机怎么回事)

  • JavaScript中的点击事件(js点击li)

    JavaScript中的点击事件(js点击li)

  • 什么情况下个人资产会被冻结
  • 房产公司预缴土地增值税怎么做账
  • 汇算清缴所得税退回做账
  • 水利建设专项资金收入优惠政策
  • 临时税务登记的小规模纳税人 个人所得税如何申报
  • 企业出租房屋增值税发票怎么开
  • 临时增加增值税发票
  • 购买旧资产如何入账
  • 长期借款借方登记归还的本金和利息
  • 收到加工劳务发票怎么做
  • 保险摊销什么 时候开始
  • 没有认缴时间的公司
  • 税务年报多少钱
  • 私立幼儿园需要转学籍吗
  • 不属于抵扣范围的是什么
  • 当地预缴2%什么时候缴纳
  • 增值税专用发票可以开电子发票吗
  • 国有企业出租房屋管理规定
  • 全年一次性奖金个税计算
  • 2018增值税暂行条例
  • 工程款税款税率
  • 个体工商户的税收优惠政策有哪些
  • 残障人士能享受的税收优惠
  • 高新企业研发费用认定条件
  • 分支机构注销留抵税额可以税前扣除吗?
  • 资产负债表中的固定资产是原值还是净值
  • 如何编制处置固定资产
  • 主合同变更对保险的影响
  • win10投影无反应
  • 出口退税一般退什么税
  • 继承房产印花税是按交易分额交吗
  • 补缴税款可以分期缴纳吗
  • 非正常损失如何处理
  • ROS2+cartographer+激光雷达+IMU里程计数据融合(robot_locazation) 建图
  • 微信小程序支付接口调用
  • 应收票据和应付票据
  • 织梦数据库连接失败的原因
  • 企业低值易耗品的摊销方法有
  • 咨询公司小规模纳税人企业所得税核定征收
  • 购买项目用设备计入什么科目
  • 企业无票支出该怎么做账
  • 长期股权投资权益法账务处理
  • 预缴了增值税在申报增值税时申报
  • 母公司给子公司注资要交印花税吗
  • 销项税额专栏记录企业销售货物
  • sqlserver日期加减月份
  • 无形资产如何摊销 当月还是下月
  • 幼儿园账务处理实务
  • 管理人员的奖金可以索赔吗
  • 固定资产的折旧标准
  • 公司参赛获奖交啥税
  • 上年未计提所得税,本年怎么做分录
  • 季度末需要结转本年利润吗
  • 购销业务活动包括哪些
  • 未分配利润太大了怎么处理
  • 一个企业建账需要注意些什么
  • 会计内帐外帐的区别在哪
  • 企业建帐的基本要求
  • apache是什么文件
  • dsapi.exe是什么
  • winxp网络连接没有无线网络
  • win7桌面点不了怎么回事
  • win7怎么关闭自带键盘
  • windows10新功能
  • 应该怎么修复
  • win10系统怎么快速启动
  • fedora update-grub
  • Linux系统配置IP地址
  • javascript零基础
  • 使用jquery操作dom
  • css 网页布局
  • python爬虫全套教程
  • 最流行的民宿装修设计
  • javascript中用于声明变量的关键字
  • unity?
  • javascript如何学
  • jquery网页制作
  • javascript基础入门视频教程
  • 企业所得税税率10%
  • 上海42年工龄退休有没有补充养老金呢
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设