python中的装饰器

什么是装饰器?

装饰器就是做装饰的,装饰谁?装饰的是函数,也就是给函数化妆。为什么要给函数化妆呢?其实就是要给函数添加一些功能,为什么要用装饰器呢?为啥不能直接修改函数呢?简单粗暴!因为加上装饰器的话,可以不改变人家原来的函数,防止你乱改人家代码出错,可维护性更好

假如我们要给一个返回字符串的函数加上标签

>>> def say_hello(name):
    return "Hello "+name+"!"

>>> def p_decorate(func):
        def func_wrapper(name):
            return '<p>'+func(name)+'</p>'
        return func_wrapper

>>> my_say_hello=p_decorate(say_hello)
>>> my_say_hello("xiaoming")
'<p>Hello xiaoming!</p>'
>>> 

装饰器是什么原理呢?

其实就是将原来的函数加一些功能变成一个新的函数,然后再把这个新的函数返回

比如p_decorate函数会返回一个装饰好的新函数func_wrapper

func_wrapper函数负责给say_hello函数化妆,也就是加新的东西,其调用原来的函数加上标签

最后p_decorate函数将化妆好的func_wrapper函数返回

这样我们将say_hello函数传入装饰器,得到了装饰好的新函数my_say_hello,我们调用就得到了结果

语法糖调用

def p_decorate(func):
    def func_wrapper(name):
        return '<p>'+func(name)+'</p>'
    return func_wrapper

@p_decorate
def say_hello(name):
    return "Hello "+name+"!"

print(say_hello("Max"))

防止函数名被改

1734701-20190919141406705-612000629.png

多个装饰器使用

1734701-20190919141419829-1003281587.png

装饰器传参

使用语法糖
1734701-20190919141436152-254434820.png

不使用语法糖

1734701-20190919141501254-1812996175.png

转载于:https://www.cnblogs.com/mengxiaoleng/p/11549245.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值