Python中的装饰器

装饰器是程序开发中经常会用到的功能,用好装饰器,可以让开发效率提高不少。装饰器的使用来加深不同模块之间的联系,并减少冗余代码。比如基础平台负责底层的功能,业务部门使用基础功能时,只需要调用基础平台提供的功能即可。当基础平台需要添加功能(对基础平台的所有功能进行重构)时,使用装饰器可以比较好的实现。

比如基础平台提供的功能如下:

def f1():
    print('f1')
    
def f2():
    print('f2')
    
def f3():
    print('f3')

在所有的功能中需要添加验证功能(新的需求)时,可以先写一个函数,然后让这些f1、f2、f3去执行这个函数。但是这样并不完美。写代码应遵循开放封闭原则,虽然这个原则是用于面向对象开发,但也用于函数式编程,换句话即实现的功能代码不允许被修改,但可以拓展。原则上是不允许在f1、f2、f3的内部进行修改代码。这样可以使用装饰器来进行更改。

def  w1(func):
    def inner():
        #验证
        #...
        func()
    return inner

@w1
def f1():
    print('f1')

@w1
def f2():
    print('f2')

@w1
def f3():
    print('f3')

即实现了上述需求

Python解释器会从上到下解释代码:

1 def w1(func):     将w1函数加载到内存

2  @w1       @函数名是python中的一种语法糖,先执行w1函数,然后返回w1的返回值。

对于装饰器,它实现的功能比较常用的有:

1.引入日志    2.函数执行时间统计    3.执行函数前预备处理     4.执行函数后清理功能    5.权限校验等场景   6.缓存

装饰器代码总结:

#定义函数,完成包裹数据
def makeBold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

#定义函数,完成包裹数据:
def makeItalic(fn):
    def  wrapped():
        return "<i>" + fn() +"</i>"
    return wrapped

@makeBold
def test1():
    return "hello world-1"
@makeItalic
def test2():
    return "hello world-2"

@makeBold
@makeItalic
def test3():
    return "hello world-3"

print(test1())
print(test2())
print(test3())

结果为

<b>hello world-1</b>
<i>hello world-2</i>
<b><i>hello world-3</i></b>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值