关于函数装饰器的一些理解

在python中我们经常听到\看到一类函数A,在这类函数的定义声明(def)之前还有类似于@xxx的记号。对于这类函数A,我们称之为被修饰的函数,而对于 @中的xxx 我们称之为函数装饰器(function decorator)。(有些地方翻译为函数修饰器
这是我在其他博主的文章里看到的,比较形象,就借用一下吧。函数修饰器算是一个比较好用的技巧,但是容易被很多人忽视,有些教程里也都没有讲。其实也没有很难,它可以最大程度的实现对已有程序的利用,只需要改变函数的输入或者输出部分,就可以实现原来函数不具备的一些功能。
具体代码:

def old_func(func):
    print('我是old_func,我被执行了')
    def mid_func(name):
        print('我是mid_func,我被执行了')
        func(name)
        print('我是mid_func,我又被执行了')
        return None
    return mid_func
# 这里使用修饰器来实现新的函数功能
# 其实等价于: old_func(new_func(name))
@old_func
def new_func(name):
    print('我是{},我被执行了'.format(name))

new_func('被修饰的函数')

输出为:

我是old_func,我被执行了
我是mid_func,我被执行了
我是被修饰的函数,我被执行了
我是mid_func,我又被执行了

原理其实就是因为python中函数传入的参数不仅可以是一般类型或者其他引用类型的数据,也可以是函数本身,毕竟在python里,“万物皆可对象”,明白了这一点以后,就可以比较好的理解这个了。当然,和函数继承有点像就是了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值