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

  • ilife扫地机器人评测(ilife 11)(ilife扫地机器人售后服务电话)

    ilife扫地机器人评测(ilife 11)(ilife扫地机器人售后服务电话)

  • 苹果怎么给app悬浮窗权限(苹果怎么给app悬浮窗设置)

    苹果怎么给app悬浮窗权限(苹果怎么给app悬浮窗设置)

  • 联想笔记本网线接口在哪里(联想笔记本网线拔不出来)

    联想笔记本网线接口在哪里(联想笔记本网线拔不出来)

  • 压屏的手机能用多久(压屏的手机能用吗)

    压屏的手机能用多久(压屏的手机能用吗)

  • 变焦版什么意思(变焦版和普通版)

    变焦版什么意思(变焦版和普通版)

  • magic ui3.0是什么系统(magic ui 3.0怎么样)

    magic ui3.0是什么系统(magic ui 3.0怎么样)

  • 聊天记录删除后还能恢复吗(聊天记录删除后怎么查找以前的记录)

    聊天记录删除后还能恢复吗(聊天记录删除后怎么查找以前的记录)

  • 华为nova7尺寸(华为nova7尺寸参数)

    华为nova7尺寸(华为nova7尺寸参数)

  • 平板电脑停用连接itunes什么意思(平板停用怎么解锁教连不上电脑)

    平板电脑停用连接itunes什么意思(平板停用怎么解锁教连不上电脑)

  • 淘宝有保价服务吗(淘宝有保价服务怎么退差价)

    淘宝有保价服务吗(淘宝有保价服务怎么退差价)

  • 华为共享热点在哪(华为共享热点在哪里找)

    华为共享热点在哪(华为共享热点在哪里找)

  • gtx880m什么级别显卡

    gtx880m什么级别显卡

  • 苹果网络设置自动关闭(苹果网络设置自动连接)

    苹果网络设置自动关闭(苹果网络设置自动连接)

  • excel2010主要功能(excel2010主要功能包括多选)

    excel2010主要功能(excel2010主要功能包括多选)

  • 微博永久封号怎么解除(微博永久封号怎样解绑手机号)

    微博永久封号怎么解除(微博永久封号怎样解绑手机号)

  • mtkp90处理器相等于骁龙多少(mtkheliog90t处理器)

    mtkp90处理器相等于骁龙多少(mtkheliog90t处理器)

  • 荣耀10上市时间(荣耀10上市时间 国内)

    荣耀10上市时间(荣耀10上市时间 国内)

  • 荣耀20s和荣耀9x对比(荣耀20S和荣耀20屏幕一样吗)

    荣耀20s和荣耀9x对比(荣耀20S和荣耀20屏幕一样吗)

  • 手机版ps怎么用(手机版ps怎么用ps抠图)

    手机版ps怎么用(手机版ps怎么用ps抠图)

  • ios13还有3dtouch吗(13有没有3d touch)

    ios13还有3dtouch吗(13有没有3d touch)

  • 网络机顶盒怎么设置(网络机顶盒怎么调出电视台节目)

    网络机顶盒怎么设置(网络机顶盒怎么调出电视台节目)

  • iqoo是什么散热(iqoo是什么散热的)

    iqoo是什么散热(iqoo是什么散热的)

  • 抖音可不可以退粉丝团(抖音可不可以退税)

    抖音可不可以退粉丝团(抖音可不可以退税)

  • 百度翻译如何下载语音(百度翻译的发音怎样下载)

    百度翻译如何下载语音(百度翻译的发音怎样下载)

  • haptictouch怎么使用(haptic touch触控)

    haptictouch怎么使用(haptic touch触控)

  • 红米怎样格式化(怎么格式化红米手机)

    红米怎样格式化(怎么格式化红米手机)

  • 新开网吧需要缴纳哪些税金
  • 个人出租汽车
  • 一般增值税怎么开票的
  • 代理费住宿费都包括什么
  • 公司销售固定资产汽车如何填申报表
  • 现代服务业加计抵减政策适用范围
  • 下列支出不可以从其应纳税所得额中扣除的是
  • 福利企业的税收优惠政策
  • 石油天然气管道保护法
  • 固定资产清理是备抵账户吗
  • 起征点与免征额的区别
  • 不含税价怎么转化为含税价
  • 打桩和挖土
  • 收回员工社保入什么科目
  • 房屋所有权变更登记证书
  • 上月未抵扣完的进项税本月可以抵扣吗
  • 工程服务税收的分类
  • 建安业一般纳税人企业所得税率是多少
  • 开出密码区的普票能入账吗?
  • 奖金分为两次发放合法吗
  • 建筑企业预收的工程款会计分录
  • 计提工资当月要结转吗?
  • 出口退税附加税计税依据
  • 技术开发免征增值税属于普通零税率项目么?
  • 合同负债和预收账款的关系
  • 企业购进房产会退税吗
  • 公司购买基金怎样入账
  • 系统浏览器
  • PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
  • 鸿蒙系统通知栏界面怎么打开
  • 报关代理费是什么
  • PHP:pg_fetch_assoc()的用法_PostgreSQL函数
  • 甲方工程扣款如何处理
  • 公司未经营需要做所得税年度清缴吗
  • win11 build 22000.65
  • 微信php开发教程
  • 废品损失是什么类账户
  • 预提费用的核算有哪些
  • 注册资金不能到位怎么办
  • 小规模纳税人缴税的分录
  • 面试官问:mysql 的自增 id 用完了,怎么办?
  • 公司开电费发票该怎么入账?
  • 新办企业发票核定及申领
  • 资产是指()
  • 普通发票可抵税吗
  • 银行存款日记账电子表格模板
  • 关于增值税调整的补充协议
  • 社保稳岗补贴怎么查询
  • 应收分保合同准备材料
  • 一般纳税人固定资产处置税率
  • 劳务关系需要交税吗
  • 内账税金如何做分录
  • 信用卡什么情况下会降额度
  • 法人银行贷款
  • 收到党建工作经费的通知
  • 总公司与分公司账务处理
  • 发票保管应由谁保管
  • 制造费用影响什么
  • 旅游费的发票可以进成本吗?
  • 金蝶暂存凭证怎样转正常凭证
  • centos bz
  • win7怎么创建新盘
  • Win10预览版怎么变回正式版
  • linux本地解析
  • win8功能大全介绍
  • node 包管理
  • visual studio 10 cocos2dx项目移植到eclipse的android项目(配置请参照上一篇文章开发环境搭建)
  • react-navigation 如何判断用户是否登录跳转到登录页的方法
  • [置顶]bilinovel
  • unity shader cull off
  • 在javascript中关于alert confirm
  • jquery crud
  • node.js使用教程
  • jquery动态添加html代码
  • python中lambda怎么用
  • 事前监督的名词解释
  • 进口汽车增值税怎么算
  • 地税局契税发票编号查询
  • 怎么注册山东省政府采购网
  • 船员工资是否需交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设