位置: 编程技术 - 正文

Python编程中装饰器的使用示例解析

编辑:rootadmin

推荐整理分享Python编程中装饰器的使用示例解析,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

装饰函数和方法

我们先定义两个简单的数学函数,一个用来计算平方和,一个用来计算平方差:

在拥有了基本的数学功能之后,我们可能想为函数增加其它的功能,比如打印输入。我们可以改写函数来实现这一点:

我们修改了函数的定义,为函数增加了功能。

现在,我们使用装饰器来实现上述修改:

装饰器可以用def的形式定义,如上面代码中的decorator。装饰器接收一个可调用对象作为输入参数,并返回一个新的可调用对象。装饰器新建了一个可调用对象,也就是上面的new_F。new_F中,我们增加了打印的功能,并通过调用F(a, b)来实现原有函数的功能。

定义好装饰器后,我们就可以通过@语法使用了。在函数square_sum和square_diff定义之前调用@decorator,我们实际上将square_sum或square_diff传递给decorator,并将decorator返回的新的可调用对象赋给原来的函数名(square_sum或square_diff)。 所以,当我们调用square_sum(3, 4)的时候,就相当于:

我们知道,Python中的变量名和对象是分离的。变量名可以指向任意一个对象。从本质上,装饰器起到的就是这样一个重新指向变量名的作用(name binding),让同一个变量名指向一个新返回的可调用对象,从而达到修改可调用对象的目的。

Python编程中装饰器的使用示例解析

与加工函数类似,我们可以使用装饰器加工类的方法。

如果我们有其他的类似函数,我们可以继续调用decorator来修饰函数,而不用重复修改函数或者增加新的封装。这样,我们就提高了程序的可重复利用性,并增加了程序的可读性。

含参的装饰器

在上面的装饰器调用中,比如@decorator,该装饰器默认它后面的函数是唯一的参数。装饰器的语法允许我们调用decorator时,提供其它参数,比如@decorator(a)。这样,就为装饰器的编写和使用提供了更大的灵活性。

上面的pre_str是允许参数的装饰器。它实际上是对原有装饰器的一个函数封装,并返回一个装饰器。我们可以将它理解为一个含有环境参量的闭包。当我们使用@pre_str('^_^')调用的时候,Python能够发现这一层的封装,并把参数传递到装饰器的环境中。该调用相当于:

装饰类

在上面的例子中,装饰器接收一个函数,并返回一个函数,从而起到加工函数的效果。在Python 2.6以后,装饰器被拓展到类。一个装饰器可以接收一个类,并返回一个类,从而起到加工类的效果。

在decorator中,我们返回了一个新类newClass。在新类中,我们记录了原来类生成的对象(self.wrapped),并附加了新的属性total_display,用于记录调用display的次数。我们也同时更改了display方法。

通过修改,我们的Bird类可以显示调用display的次数了。

Python判断列表是否已排序的各种方法及其性能分析 声明本文基于Python2.7语言,给出判断列表是否已排序的多种方法,并在作者的WindowsXP主机(PentiumG.7GHz主频2GB内存)上对比和分析其性能表现。一.问题提

解析Python中的生成器及其与迭代器的差异 生成器生成器是一种迭代器,是一种特殊的函数,使用yield操作将函数构造成迭代器。普通的函数有一个入口,有一个返回值;当函数被调用时,从入口

Python中在for循环中嵌套使用if和else语句的技巧 for...[if]...构建List(Listcomprehension)1.简单的for...[if]...语句Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素

标签: Python编程中装饰器的使用示例解析

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

上一篇:12步入门Python中的decorator装饰器使用方法(python如何入门)

下一篇:Python判断列表是否已排序的各种方法及其性能分析(如何判断python列表长度)

  • 土地增值税的计算方法公式
  • 公司车船使用税会计分录
  • 小规模纳税人征税规定
  • 企业所得税纳税人
  • 利润表的税金及附加是计提数还是实缴数
  • 公司被员工劳动仲裁
  • 在建无形资产入账
  • 小规模纳税人不能抵扣进项税额
  • 收到代发工资的信息
  • 搭赠的商品怎么开票
  • 残值要不要做分录
  • 音乐茶座取什么名字好呢
  • 因员工过失造成第三方损失
  • 小微企业银行贷款印花税
  • 购买财务软件账务处理规定
  • 会计科目应收账款什么意思
  • 个人所得税是否分段计算
  • 研发部门属于哪个会计科目
  • 税务与审计调整结果不一致该如何调整?
  • 医院哪些收入需要交企业所得税
  • 合同签了发票开了钱没给怎么办
  • 案例分析工程发票进项高于销项怎么抵扣?
  • 电子发票缩小多少比例打印
  • 多付工资计入哪个科目
  • 发票超过标准可以报销吗
  • 商品流通企业会计零售业务核算
  • 海关增值税当月可以抵扣吗
  • 去年的财务费用忘记帐能入今年的账吗?
  • 机票的保险费能开发票吗
  • 收到政府补贴的装修款
  • 如何给电脑文件加密并设置密码
  • 记账凭证的摘要怎么填写
  • 以房产投资联营,收取固定收入,不承担联营风险的房产
  • 没结婚生了小孩分手了怎么办?
  • 进项税额资产还是负债
  • html六边形的盒子怎么做
  • 无偿转让股权印花税计税金额
  • 什么情况下应该辞职
  • 微信小程序实现发红包
  • 出口退税超期了怎么办
  • 织梦使用教程
  • javagui框架
  • 企业购进生产设备的会计分录
  • 财企[2002]313号
  • 科技型中小微企业贷款贴息贴保项目入库
  • 投资性房地产的后续计量
  • 发票系统技术维护费
  • 个人所得税计提会计分录怎么做
  • 残保金会计分录人员经费
  • 会计凭证中的数字怎么填
  • 未开票收入怎么申报增值税
  • 购税盘怎么做会计分录
  • 以前年度的销售退回能否直接冲减销售收入
  • 化妆品消费税纳税标准
  • 收到返还工会经费账务处理
  • 银行承兑汇票以公允价值计量
  • 发生坏账时的分录
  • 综合所得预扣预缴表校验结果以下人员未报送
  • 收到汇算清缴后怎么做账
  • 本期应补退税额是什么意思
  • 总账设置包括哪些内容
  • macos sierra版本10.12.6升级
  • 不能在windows7里进行设置的网络位置是
  • 苹果Mac系统怎么安装
  • msoobe.exe是什么
  • win10装老版本
  • windows7如何启动记事本
  • win7系统玩英雄联盟没有声音
  • 虚拟网卡在哪里设置
  • sdk有问题
  • JavaScript+html5 canvas实现本地截图教程
  • python截屏幕的图
  • python读取图片属性
  • python怎么在网上赚钱
  • python django 项目框架图
  • 如何配置centos7
  • 如何查看自己公司的税种
  • 车辆购置税非本人可以代缴吗
  • 吉林省税务局发票流向查询系统
  • 地方税务局怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设