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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |