加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python -- 装饰器

发布时间:2020-12-20 12:58:58 所属栏目:Python 来源:网络整理
导读:一、装饰器(Decorator) 装饰器本质上也是一个函数,它可以为已设计好的函数增加额外的功能。 装饰器的定义与普通函数的定义在形式上是类似的。 不同的是装饰器 必须传入一个函数对象 作为参数,然后在装饰器中 重新定义一个新的函数 。 在这个函数中执行新

一、装饰器(Decorator)

装饰器本质上也是一个函数,它可以为已设计好的函数增加额外的功能。

装饰器的定义与普通函数的定义在形式上是类似的。

不同的是装饰器必须传入一个函数对象作为参数,然后在装饰器中重新定义一个新的函数

在这个函数中执行新增的操作,并对应的位置调用被装饰的函数。最后返回这个新定义的函数。

既可以为多个函数添加同一个装饰器,也可以给一个函数添加多个装饰器。

如果被装饰的函数带有参数,装饰器中的函数也需要添加相同数量的参数。

无法确定具体的参数时,可以在装饰器函数中使用不定长参数。(*args,**kwargs) 元组&字典格式传入

?

from datetime import date# -------------------------------------------# 装饰器(Decorator):给已设计好的函数增加额外的功能# -------------------------------------------# func:被装饰的函数名# inner:装饰完的函数名def prefix(func):    # 装饰器函数    def inner():    #这里是装饰器新定义的函数,原来的功能        print("今天的日期是:")        return func()  #返回的是today()函数的内容    return inner@prefix #添加新的功能,保持原有的函数名不变,today是在原有装饰器上被装饰的函数def today():    print(date.today())# today = prefix(today)today() # 由于有装饰器,执行debug后,单个执行会跳转到innner()函数中;与函数today()名相同,调用today函数# -----------------------------------# 给多个函数添加相同的装饰器# -----------------------------------def add_confirm(func):    def confirm():        print("您确认要执行下面的操作吗:")        return func()    return confirm@add_confirmdef f1():    print(‘新增记录‘)@add_confirmdef f2():    print(‘删除记录‘)@add_confirmdef f3():    print(‘修改记录‘)f1()f2()f3()print()# --------------------------------# 被装饰函数具有相同的参数个数# --------------------------------def add_confirm1(func):    # 传入相应长度的参数列表    def confirm(arg):        print("您确认要执行下面的操作吗:")        return func(arg)    return confirm@add_confirm1def fun1(arg1):    print(‘新增记录:‘,arg1)@add_confirm1def fun2(arg1):    print(‘删除记录:‘,arg1)@add_confirm1def fun3(arg1):    print(‘修改记录:‘,arg1)fun1(1005)fun2(1003)fun3(1002)print()# --------------------------------# 被装饰函数具有不同的参数个数# --------------------------------def add_confirm2(func):    # 传入不定长参数    def confirm(*args,**kwargs):        print("您确认要执行下面的操作吗:")        return func(*args,**kwargs)    return confirm@add_confirm2def func1(arg1):    print(‘新增记录:{}‘.format(arg1))@add_confirm2def func2(arg1,arg2):    print(‘删除记录:{}、{}‘.format(arg1,arg2))@add_confirm2def func3(arg1,arg2,arg3):    print(‘修改记录:{}、{}、{}‘.format(arg1,arg3))func1(1009)func2(1005,1006)func3(1001,1002,1003)print()# --------------------------------# 给一个函数增加多个装饰器# --------------------------------def confirm_operate(func):    def confirm(*args,**kwargs):        print("您确认要执行下面的操作吗?")        return func(*args,**kwargs)    return confirmdef confirm_data(func):    def confirm(*args,**kwargs):        print("您确认数据是正确的吗?")        return func(*args,**kwargs)    return confirm@confirm_operate@confirm_datadef modify(arg1):    print("修改数据:",arg1)modify(1006)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读