Python语言学习:Python装饰器讲解(二)
小标 2018-12-10 来源 : 阅读 1334 评论 0

摘要:本文主要向大家介绍了Python语言学习:Python装饰器讲解(二),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了Python语言学习:Python装饰器讲解(二),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

回顾  上一节我们进行了Python简单装饰器的讲解,但是python的装饰器还有一部分高级的使用方式,这一节就针对python装饰器高级部分进行讲解。为一个函数添加多个装饰器  今天,老板又交给你一个任务,老板说:"之前的装饰器用用起来挺好,但是这次我需要再次添加更多的参数,这个任务就交给你了,好好干。",这种时候,我们就可以针对一个函数使用多个装饰器。import datetimedef hel(func):    def inner(*args,**kwargs):
        r = func(*args,**kwargs)        print('bye')        return r    return innerdef hel1(func):    def inner(*args,**kwargs):        print('start time:%s' % datetime.datetime.now())
        r = func(*args,**kwargs)        print('end time:%s'%datetime.datetime.now())        return  r    return  inner

@hel1
@heldef f1(name):    print('hello')    print(name)

name = 'alexsel'f1(name)

执行结果:
start time:2018-07-01 10:36:02.085027hello
alexsel
bye
end time:2018-07-01 10:36:02.086027这次我们在对之前代码添加数据的时候,我们写了第二个装饰器,我们使用这个装饰器针对之前的函数再次增加新的功能,输出了开始结束时间。代码及输出问题解析针对刚才多个装饰器,我们需要了解的是在进行输出的时候是怎么进行输出的,首先装饰器函数hel首先对f1函数进行装饰,然后装饰器函数hel1在对被hel装饰过函数进行装饰,最后执行两次装饰过的函数。在新添加的装饰器中(hel1)的func所指的函数是已经被hel装饰过的函数。带参数的装饰器  装饰器在调用的时候可以传入相应的参数,传入参数以后我们可以根据不同的参数,针对函数进行相应信息输出。def use_log(level):    def hel(func):        def inner(*args,**kwargs):            if level == 'warning':                print('The current function:%s'%func.__name__)
            r = func(*args,**kwargs)            return r        return inner    return hel

@use_log(level = 'warning')def f1(name):    print('hello')    print(name)


f1(name = 'alexsel')

输出结果:
The current function:f1
hello
alexsel上面的代码就是可以带有参数的装饰器,就是将以前我们使用简单的装饰器进行了一次封装,当我们调用函数的时候,python可以将我们定义的装饰器的参数传入函数中。基于类的装饰器  讲解python的类装饰器需要用到python类的知识,python的类我们还没有进行学习,就先简单了解一下。  根据我们刚才对装饰器的学习,我们发现装饰器如果需要正常运行,装饰器所接受的对象必须是可调用的,然后在装饰器内部在返回一个可调用的对象,一般情况下,可调用的对象都是函数,特殊情况是对象中写入了__call__()方法就也是可以调用的对象。class Test():    def __call__(self):        print('test')

te = Test()
te()

输出结果:
test我们是有类装饰器的时候,可以让类的构造函数__init__()接受一个函数,然后重载一个__call__()并且返回一个函数,来达到装饰器的目的。class Test():    def __init__(self,func):
        self.func = func    def __call__(self,*args,**kwargs):        print('The current function:%s' % self.func.__name__)        return  self.func()

@Testdef tes():    print('obj')

tes()


输出结果:
The current function:tes
tes装饰器就是对原来函数、对象功能的扩展,相当于对函数重新封装,重点需要理解的是装饰器中返回的是函数,而且装饰器所装饰器的对象也需要是可调用的。今天装饰器的高级部分就到这里。  

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved