Python多层装饰器用法实例分析
作者:路虽远在路上 发布时间:2023-08-20 07:34:35
标签:Python,多层装饰器
本文实例讲述了Python多层装饰器用法。分享给大家供大家参考,具体如下:
前言
Python 的装饰器能够在不破坏函数原本结构的基础上,对函数的功能进行补充。当我们需要对一个函数补充不同的功能,可能需要用到多层的装饰器。在我的使用过程中,遇到了两种装饰器层叠的情况,这里把这两种情况写下来,作为踩坑记录。
情况1
def A(funC):
def decorated_C(funE):
def decorated_E_by_CA(*args, **kwargs):
out = funC(funE)(*args, **kwargs)
return out +' > decorated by A'
return decorated_E_by_CA
return decorated_C
@A
def C(funE):
def decorated_E_by_C(str):
return funE(str)+' > decorated by C'
return decorated_E_by_C
@C
def E(str):
return str
print E('A string is ')
这种情况下首先 E(str) = C(E)(str)
,然后由于C = A(C)
,还有 E(str) = A(C)(E)(str)
。这么一来他们的关系就明确了,装饰器 A 装饰的是装饰器 C,它返回了一个被装饰过的装饰器,而被装饰过的装饰器又可以去装饰函数 E。在上面的代码中,decorated_C 就是一个被装饰过的装饰器。
情况2
def A(funE_decorated_by_C):
def redecorated_E(str):
return funE_decorated_by_C(str)+' > redecorated by A'
return redecorated_E
def C(funE):
def decorated_E(str):
return funE(str)+' > decorated by C'
return decorated_E
@A
@C
def E(str):
return str
print E('A string is ')
这种情况下,有 E(str) = A(C(E))(str)
。首先装饰器 C 装饰函数 E,返回一个被 C 装饰过的函数,然后装饰器 A 再装饰这个被 C 装饰过的函数。与第一种情况的区别是,这里的装饰器 A 装饰的是一个函数,而不是一个装饰器。
希望本文所述对大家Python程序设计有所帮助。
来源:http://blog.csdn.net/u010185894/article/details/71191811
0
投稿
猜你喜欢
- 今天记录一下如何使用python收发邮件,知识要点在python内置的poplib和stmplib模块的使用上。1. 准备工作首先,我们需要
- 删除字符串最后一个字符的方法1.使用strip()方法删除最后一个字符Python strip() 方法用于移除字符串头尾指定的字符(默认为
- this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。和其他
- 构建一个二阶多项式:x^2 - 4x + 3多项式求解>>> p = np.poly1d([1,-4,3])
- 手机控件查看工具uiautomatorviewer工具简介用来扫描和分析Android应用程序的UI控件的工具.如何使用 1.进入
- 字面意思上的区别Attribute与property, 都可翻译成属性. 虽然无论是在中文中还是英文中 它们的意思都几乎一样, 但仍有些许差
- 背景Python 作为一门成熟的编程语言,拥有无数优秀的第三方包以方便开发者能够快速地构建应用。一般来说,如果你开发了一个 Python 软
- 在自动化中, Selenium 自动化测试中有一个名字经常被提及 PageObject( 思想与面向对象的特征相 同 ) ,通常 PO 模型
- 在开发网站的过程中,404,500错误,是不可避免产生的。一旦产生了这种错误,很多可以通过web server 来处理。比如使用 apach
- 基础理论第一层:卷积层。第二层:卷积层。第三层:全连接层。第四层:输出层。图中原始的手写数字的图片是一张 28×28 的图片,并且是黑白的,
- 什么是fixture根据pytest官方文档的说明,fixture可以简单的归纳为具有以下功能的函数:配置测试前系统的初始状态;定义传入测试
- pytorch retain_graph==True的作用说明总的来说进行一次backward之后,各个节点的值会清除,这样进行第二次bac
- 该程序通过绘制树干(最初是树;后来是树枝)并递归地添加树来绘制“树”。 使用Pillow。利用递归函数绘制分形树(fractal tree)
- 说明1、通过特征本身的方差来筛选特征。特征的方差越小,特征的变化越不明显。2、变化越不明显的特征对我们区分标签没有太大作用,因此应该消除这些
- 首先这个是7米当时问我一个问题,不过可惜我不知道怎么解决,后来知道解决方法很简单,只是添加了一个margin-top:-1em就
- 使用pickle模块来dump你的数据:对上篇博客里的sketch.txt文件:import osimport sysimport pick
- fsockopen函数能够运用,首先要开启php.ini中的allow_url_open=on;fsockopen是对socket客户端代码
- torch.save:保存序列化的对象到磁盘,使用了Python的pickle进行序列化,模型、张量、所有对象的字典。torch.load:
- 最近决定把MT的后台数据从Berkeley的文件DB转到MySQL。原因之一是使用关系数据库可以获得更多的灵活性,比如运行一条sql来变更
- 如何计算方差简单展示一下pandas里怎么计算方差:官方文档:def def_std(df): for ix,row in df