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

在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里,“万物皆可对象”,明白了这一点以后,就可以比较好的理解这个了。当然,和函数继承有点像就是了。

猜你喜欢

转载自blog.csdn.net/onepunch_k/article/details/123991066