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

  • ps照片蓝底换成白底怎么换(ps照片蓝底换成白底软件)

    ps照片蓝底换成白底怎么换(ps照片蓝底换成白底软件)

  • 海尔洗衣机出现e6怎么处理(海尔洗衣机出现e2是什么情况)

    海尔洗衣机出现e6怎么处理(海尔洗衣机出现e2是什么情况)

  • 小米云服务有什么用?(小米云服务什么意思)

    小米云服务有什么用?(小米云服务什么意思)

  • 魅族17pro支持多少倍变焦呢(魅族17pro支持多少瓦)

    魅族17pro支持多少倍变焦呢(魅族17pro支持多少瓦)

  • realtek是什么软件

    realtek是什么软件

  • 三星s10开机后出现正在启动(三星s10开不了机图标闪烁)

    三星s10开机后出现正在启动(三星s10开不了机图标闪烁)

  • ginee是什么牌子的手机(ginee是什么牌子手机,电话录音这样操作?)

    ginee是什么牌子的手机(ginee是什么牌子手机,电话录音这样操作?)

  • abr是什么格式(adr是什么格式的文件)

    abr是什么格式(adr是什么格式的文件)

  • qq连麦怎么关闭麦克风(qq连麦怎么关闭镜像模式)

    qq连麦怎么关闭麦克风(qq连麦怎么关闭镜像模式)

  • qq发空白消息代表什么(qq发空白消息代码)

    qq发空白消息代表什么(qq发空白消息代码)

  • 微信好友互删后以前的评论还有吗(微信好友互删后再加上以前聊天记录还有吗)

    微信好友互删后以前的评论还有吗(微信好友互删后再加上以前聊天记录还有吗)

  • 文本文档的扩展名是什么(文本文件的扩展)

    文本文档的扩展名是什么(文本文件的扩展)

  • 快手特别关注有什么用(快手特别关注有上限怎么办)

    快手特别关注有什么用(快手特别关注有上限怎么办)

  • 亚马逊上架产品的步骤(亚马逊上架产品禁止显示的原因)

    亚马逊上架产品的步骤(亚马逊上架产品禁止显示的原因)

  • 怎么查看美团消费总额(怎么查看美团消费明细记录)

    怎么查看美团消费总额(怎么查看美团消费明细记录)

  • 手机如何测试网速(手机如何测试网速多少)

    手机如何测试网速(手机如何测试网速多少)

  • 滴滴快车能打往返的么(滴滴可以打单子吗)

    滴滴快车能打往返的么(滴滴可以打单子吗)

  • xr拍慢动作闪屏正常吗(苹果xr相机慢动作闪屏)

    xr拍慢动作闪屏正常吗(苹果xr相机慢动作闪屏)

  • 荣耀9x有指纹解锁吗(荣耀9x指纹解锁失灵)

    荣耀9x有指纹解锁吗(荣耀9x指纹解锁失灵)

  • win10平板模式能触屏吗(win10平板模式体验)

    win10平板模式能触屏吗(win10平板模式体验)

  • 打电话短信呼什么意思(打电话短信呼是怎么回事)

    打电话短信呼什么意思(打电话短信呼是怎么回事)

  • 搜索别人的抖音别人知道吗(搜索别人的抖音号会被发现吗)

    搜索别人的抖音别人知道吗(搜索别人的抖音号会被发现吗)

  • 小米手机的屏幕分辨率怎么调(小米手机的屏幕使用时间在哪里)

    小米手机的屏幕分辨率怎么调(小米手机的屏幕使用时间在哪里)

  • 苹果耳机怎么关机(苹果耳机怎么关闭语音播报)

    苹果耳机怎么关机(苹果耳机怎么关闭语音播报)

  • 如何在Windows11上配置静态IP地址(如何在windows11上打开蓝牙)

    如何在Windows11上配置静态IP地址(如何在windows11上打开蓝牙)

  • 利润分配未分配利润和未分配利润的区别
  • 简易计税是否要申报个税
  • 进项认证以后如何开具红字信息表
  • 发票行业税目怎么选择
  • 公司全部股权转让流程
  • 开业费用属于什么费用
  • 建筑业预缴税款都要填哪些表
  • 没有外币账户可以收外币吗
  • 残疾人就业保障金申报时间
  • 企业间拆借资金是否缴税
  • 过期增值税发票怎么处理
  • 第三方用人单位应承担哪些责任
  • 刷信用卡付货款怎么操作
  • etc开了充值发票还可以开消费发票么?
  • 跨省的分公司亏损需要缴纳所得税吗?
  • 销售不动产如何开票样本
  • 企业清算时,经营收入与清算收益可以合并申报吗?
  • 所得税补缴自查需要缴纳什么
  • 收到投资款不做资本可以做什么?
  • 增值税一般纳税人认定标准
  • 小规模纳税人一个月能开多少税票
  • 个人出租房屋给公司可以开专票吗
  • 纳税人申领发票流程
  • 工程承包款要交多少税
  • 工程安装人工外包合同怎么写
  • mac安装软件提示身份不明
  • 六月雪的养殖方法和注意事项
  • 事业单位财政补助收入会计分录
  • 营业外支出的核算内容包括
  • videojs自定义按钮
  • vben admin框架怎么实现上传文件时拿到文件参数
  • intel me有什么用
  • 电脑进程ace是什么
  • system 进程
  • 大金中央空调面板图解
  • vue3的生命周期
  • 预提的奖金需要缴纳个人所得税吗
  • 补充养老保险的特点
  • 增值税专用发票丢了怎么补救
  • laravel视频教程
  • 自然人股东是
  • 残疾人保障金是什么科目
  • 原生js实现promise
  • 大前端2021
  • elementui form rules
  • 主营业务成本记错了怎么调整
  • 差旅费津贴与差旅费补助
  • 开源php 系统
  • 不走流水开发票可以吗
  • sql数据库存储过程怎么写
  • 个体定额和不定额有什么区别
  • 合作社分红计入什么科目
  • 客户是否需要向客户介绍
  • 研发费用账务处理一定在管理费用吗
  • 发工资时多打给员工的钱
  • 专项应付款如何核算
  • 如果非货币性资产会怎样
  • 银行进账单是什么样子的
  • 哪几种情况涉及到进项税额的转出
  • 银行回单自助打印可以打多久的记录
  • 工程预算费用怎么做会计分录
  • 小规模纳税人的增值税账务处理
  • 建筑公司的会计好做吗
  • mysql2003错误如何解决10061
  • win7系统打开网页出现file not found
  • winxp系统如何安装
  • linux i
  • freebsd怎么样
  • 微软surface pro 3按键驱动
  • win1020h2累积更新
  • xp系统设置局域网
  • Centos 6.5 x86_64 安装或者设置花生壳ddns的技巧
  • xp系统升级成win7还会卡吗
  • linux 使用
  • 事件委托实现
  • shell脚本加密不可破解
  • 批处理中数字可以用什么代替
  • java urlencode如何使用
  • 税务局网上开票平台app
  • 山东中信银行电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设