位置: 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算法面试题有答案吗)

  • 华为电子秤怎么连手机(华为电子秤怎么开机)

    华为电子秤怎么连手机(华为电子秤怎么开机)

  • 华为手机怎么修改时间24小时制(华为手机怎么修改日期)

    华为手机怎么修改时间24小时制(华为手机怎么修改日期)

  • airpods连安卓手机音量小(airpods连安卓手机没声音)

    airpods连安卓手机音量小(airpods连安卓手机没声音)

  • 小米9se怎么恢复出厂设置(小米9se怎么恢复出厂)

    小米9se怎么恢复出厂设置(小米9se怎么恢复出厂)

  • wps打开后排版变了(wps打开word文档时排版变了)

    wps打开后排版变了(wps打开word文档时排版变了)

  • 手机录像为啥人是反的(为什么手机录像自己好丑)

    手机录像为啥人是反的(为什么手机录像自己好丑)

  • iphone发邮件发不出去(苹果手机邮件发不出)

    iphone发邮件发不出去(苹果手机邮件发不出)

  • 小米cc9屏幕对比小米9(小米cc9屏幕参数)

    小米cc9屏幕对比小米9(小米cc9屏幕参数)

  • 能查自己的通话语音吗(查自己的通话记录怎么查)

    能查自己的通话语音吗(查自己的通话记录怎么查)

  • 安卓手机白屏怎么快速修复(安卓手机白屏怎么恢复)

    安卓手机白屏怎么快速修复(安卓手机白屏怎么恢复)

  • 荣耀8是双卡双待的吗(荣耀8是双卡双待手机吗)

    荣耀8是双卡双待的吗(荣耀8是双卡双待手机吗)

  • 被拉黑还能收到短信吗(被拉黑还能收到验证消息吗)

    被拉黑还能收到短信吗(被拉黑还能收到验证消息吗)

  • 华为手机的通话录音文件在哪里可以找到(华为手机的通话记录删除了怎么恢复)

    华为手机的通话录音文件在哪里可以找到(华为手机的通话记录删除了怎么恢复)

  • 小米手机开关机键失灵怎么办(小米手机开关机键坏了,得多少钱修)

    小米手机开关机键失灵怎么办(小米手机开关机键坏了,得多少钱修)

  • oppo手机上的hd是什么意思怎么关(oppo手机上的HD是什么)

    oppo手机上的hd是什么意思怎么关(oppo手机上的HD是什么)

  • 苹果九键怎么换行(苹果九键怎么换行打字)

    苹果九键怎么换行(苹果九键怎么换行打字)

  • 苹果11怎么设置双卡双待(苹果11怎么设置壁纸)

    苹果11怎么设置双卡双待(苹果11怎么设置壁纸)

  • 虾米音乐是下不了mv吗(虾米音乐不能下载了吗)

    虾米音乐是下不了mv吗(虾米音乐不能下载了吗)

  • 怎么关闭QQ音乐自动强制更新(怎么关闭qq音乐vip自动续费)

    怎么关闭QQ音乐自动强制更新(怎么关闭qq音乐vip自动续费)

  • 安卓怎么上ios游戏(怎样在安卓上玩ios)

    安卓怎么上ios游戏(怎样在安卓上玩ios)

  • 电脑微信登录不上怎么办(电脑微信登录不用手机确认)

    电脑微信登录不上怎么办(电脑微信登录不用手机确认)

  • 华为mate20怎么打开语音唤醒(华为mate20怎么打开usb共享网络)

    华为mate20怎么打开语音唤醒(华为mate20怎么打开usb共享网络)

  • vivos1屏幕是哪种材质(vivos1屏幕是什么屏)

    vivos1屏幕是哪种材质(vivos1屏幕是什么屏)

  • 苹果导航键在哪里设置(苹果导航键在哪里打开)

    苹果导航键在哪里设置(苹果导航键在哪里打开)

  • opporeno10倍变焦版支持5g吗(opporeno10倍变焦版前置摄像头)

    opporeno10倍变焦版支持5g吗(opporeno10倍变焦版前置摄像头)

  • 百旺金税盘官网
  • 契税通过应交税费
  • 房屋契税缴纳比例
  • 小规模企业增值税减免政策
  • 如何查询开出的全电发票
  • 调减加计抵减额会计分录
  • 小企业会计准则会计科目表
  • 销货方违规作废增值税专用发票怎么处理
  • 母子公司间资产划拨开免税发票
  • 可供出售金融资产包括哪些内容
  • 企业工资薪酬包括哪些内容
  • 认缴制下股权转让如何不交税
  • 代收国税地税收入
  • 抽奖获得的奖品有权转卖吗
  • 不占股权投资如何做账
  • 增值税的销项税额和进项税额的区别
  • 资产负债表里面的应收账款包括哪些
  • 企业所得税一季度盈利二季度亏损
  • 支付股息如何做账务处理
  • 营业范围是销售范围吗
  • win10 21h1激活密钥
  • 碎片化对应什么
  • 怎么光驱重装系统
  • php框架基础教程
  • 购买增值税防伪税控系统专用设备
  • 网页提示摄像头未授权
  • 个人如何办理住房贷款
  • php缩放图片
  • php内容修改
  • win10商店发生了错误请稍后再试
  • 车保险理赔的钱多久到账
  • 计量差错引起的盘亏
  • 金融资产的会计处理方法
  • 直接材料成本差异账户在平时登记贷方登记
  • echarts饼图参数配置
  • Ubuntu18.04配置允许远程访问
  • vue权限管理面试题
  • react useref获取dom元素
  • 专用发票跨月冲红给对方吗
  • html5 function
  • 连带责任担保会被拘留吗
  • 固定资产的认定标准2000元
  • echarts怎么引入
  • 累计折旧如何计算使用年限
  • 修理费账务处理
  • SQL2005 provider: 命名管道提供程序 error: 40 无法打开到 SQL Server 的连接
  • mysql数据控制语句
  • 影响企业营业利润的有哪些
  • 物品数量怎么填写
  • 没有抄税会导致什么情况
  • 成品油发票如何作废
  • 销售样品分录
  • 商品盘点短缺
  • 购房契税如何入账
  • 借款利息应计入
  • 现金流量少
  • 被选为工会代表
  • 生产成本是直接成本吗
  • 建筑劳务公司的会计账务处理
  • 私营公司的钱怎么拿出来
  • mysql group order
  • mac怎么使用自动切换输入法
  • linux虚拟机基本操作
  • ngctw32.exe - ngctw32是什么进程 有什么用
  • win10 edge浏览器崩溃
  • win8.1无线
  • Linux Shell 通配符、元字符、转义符使用实例介绍
  • windows更新某些设置由你的组织来管理是什么意思
  • 各种linux系统比较
  • windows向microsoft报告
  • win10周年版
  • 语音聊天能不能调出来
  • div li
  • 使用jquery
  • Node.js中的什么模块是用于处理文件和目录的
  • unity rp
  • 15个常用的excel函数公式
  • python3 with语句
  • 安卓消息处理机制
  • 福建平潭综合实验区属于哪个市
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设