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

  • realme gt neo2多少钱(realme gt neo2多少厘米)

    realme gt neo2多少钱(realme gt neo2多少厘米)

  • oppok9pro怎么设置应用锁(OPPOK9Pro怎么设置防误触)

    oppok9pro怎么设置应用锁(OPPOK9Pro怎么设置防误触)

  • 朋友圈可以发gif动图吗(朋友圈可以发gift吗)

    朋友圈可以发gif动图吗(朋友圈可以发gift吗)

  • 华为nova7pro的屏幕是曲面屏的吗(华为nova7pro的屏幕刷新率)

    华为nova7pro的屏幕是曲面屏的吗(华为nova7pro的屏幕刷新率)

  • 隔空投送点不动蓝色的(隔空投送不动了)

    隔空投送点不动蓝色的(隔空投送不动了)

  • qq填写资料进行验证不能通过(qq资料填写有误是怎么回事好)

    qq填写资料进行验证不能通过(qq资料填写有误是怎么回事好)

  • 1010开头的电话是什么(1010开头的电话都是些什么电话)

    1010开头的电话是什么(1010开头的电话都是些什么电话)

  • 注册微信号显示注册环境异常(注册微信号显示网络出错)

    注册微信号显示注册环境异常(注册微信号显示网络出错)

  • qq发的视频看不了怎么回事(qq发的视频看不到)

    qq发的视频看不了怎么回事(qq发的视频看不到)

  • 钉钉悬浮窗看电视剧会不会计入时长(钉钉悬浮窗看电视剧算不算时间)

    钉钉悬浮窗看电视剧会不会计入时长(钉钉悬浮窗看电视剧算不算时间)

  • 华为p40怎么关机重启(华为P40怎么关机)

    华为p40怎么关机重启(华为P40怎么关机)

  • 苹果8plus怎么设置无线充电(苹果8plus怎么设置nfc门禁卡)

    苹果8plus怎么设置无线充电(苹果8plus怎么设置nfc门禁卡)

  • bios保存是哪个键(bios保存设置)

    bios保存是哪个键(bios保存设置)

  • 本机进入ott模式怎么办(本机进入OTT模式怎么解除)

    本机进入ott模式怎么办(本机进入OTT模式怎么解除)

  • 抖音不想看的视频怎么屏蔽(抖音不想看的视频怎么不感兴趣)

    抖音不想看的视频怎么屏蔽(抖音不想看的视频怎么不感兴趣)

  • 苹果不越狱怎么下载安卓游戏(苹果不越狱怎么用kuaidial)

    苹果不越狱怎么下载安卓游戏(苹果不越狱怎么用kuaidial)

  • 华为分屏功能怎么使用(华为分屏功能怎么使用视频)

    华为分屏功能怎么使用(华为分屏功能怎么使用视频)

  • vivo获取设备信息权限(vivos9获取设备信息权限在哪里设置)

    vivo获取设备信息权限(vivos9获取设备信息权限在哪里设置)

  • 现在微商卖什么比较好能赚钱?(现在微商卖什么最赚钱)

    现在微商卖什么比较好能赚钱?(现在微商卖什么最赚钱)

  • qq被屏蔽怎么破解方法(qq被屏蔽怎么破解)

    qq被屏蔽怎么破解方法(qq被屏蔽怎么破解)

  • 青客宝余额提现不了(青客宝提现要审核多久)

    青客宝余额提现不了(青客宝提现要审核多久)

  • 删除的通话记录怎么恢复(删除的通话记录在营业厅能查到吗?)

    删除的通话记录怎么恢复(删除的通话记录在营业厅能查到吗?)

  • a1784是什么版本(苹果a1784是什么版本)

    a1784是什么版本(苹果a1784是什么版本)

  • hottray.exe是什么进程 有什么作用 hottray进程查询

    hottray.exe是什么进程 有什么作用 hottray进程查询

  • Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等(cesium三维地球)

    Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等(cesium三维地球)

  • YOLOV7训练自己的数据集以及训练结果分析(手把手教你)(yolov7训练自己的模型用 flask封装)

    YOLOV7训练自己的数据集以及训练结果分析(手把手教你)(yolov7训练自己的模型用 flask封装)

  • 滑准税是指关税的税率
  • 新个税税率法
  • 小规模纳税人购买原材料会计分录
  • 资本公积只能转现金吗
  • 做账一定要银行对账单吗
  • 30万免税超过30万
  • 接受劳务是进项还是销项
  • 发票上是17%的税率吗
  • 资源税的销售额包括
  • 投资公司的投资人叫什么
  • 银行汇票怎么填写
  • 收到一笔支付宝转账,如何查看转账人
  • 房地产形象海报
  • 个人咨询服务费合同
  • 朋友抵押贷款通过我公司名义会怎样
  • 出差报销单可以委托他人签字吗
  • 计提社保个人部分需要计提吗
  • 税控盘开票显示操作未授权
  • 兼兼的意思
  • 对公账户转法人私人账户用途写什么
  • 金税盘用户管理是灰色不能点击
  • 白酒与外购产品的区别
  • 既加工又有安装费的公司
  • 利息支出应计入
  • 外贸过程中的银行是什么
  • 以前年度原材料调出怎么做会计分录
  • win10开机启动项怎么删除
  • ScanMailOutLook.exe - ScanMailOutLook是什么进程 有什么用
  • 软件登记费用
  • linux怎么查看防火墙信息
  • 高新技术企业在哪申报年报
  • php常用设计模式有哪些
  • 跆拳道馆怎么盈利
  • php查询sqlserver数据库
  • Midjourney之外21款免费的AI Image画图网站集合
  • 电汇收款的会计分录
  • 应收账款属于会计的哪个要素
  • 税控盘全额抵扣发票怎么勾选
  • 电子发票冲红后对方能查到吗
  • 个体户税率征收
  • 帝国cms怎么样
  • 高新企业奖励要交企业所得税吗
  • python里eval的用法
  • sql2008收缩日志文件
  • 民办非企业单位什么意思
  • 货物运输企业的经营内容
  • 所得税核定征收的政策
  • 辅助生产车间的低值易耗品计入
  • 金税三期个税卸载流程
  • 餐饮企业原材料采购描述错误的是
  • 事业单位会计的特点
  • 增值税进项发票抵扣期限是多少天?
  • 押金无法收回账怎么办
  • 业务招待费可以进项抵扣吗
  • 油卡办理需要多久?
  • 出口货物两张报关单
  • 筹建期的财务费怎么算
  • 管理费用包括哪些
  • 明细账设置是什么意思
  • mysql加密解密
  • fedora常用命令
  • mac如何快速关闭程序
  • exfat 打不开
  • ubuntu 14.04.6
  • windows没有
  • 电脑重装系统win8
  • windows10预览
  • win8怎么把任务栏变成透明
  • linux的curl
  • cocos2dx视频教程
  • excel嵌入图片变成代码怎么办
  • exception继承
  • 表示网页行为的是
  • javascript零基础
  • 深入理解javascript特性.pdf
  • Python Sql数据库增删改查操作简单封装
  • 深圳市财政上交广东省吗
  • 石油类资源税税率是多少
  • 增值税即征即退申报表怎么填
  • 杭州注册公司需要钱吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设