目录
Python装饰器
装饰器接受一个函数,添加一些功能并返回它。接下将告诉你如何创建装饰器,以及它的简单使用
简介
在python中有一个比较有趣的的属性,叫做装饰器,可以为现有代码添加功能(也叫元编程),因为程序的一部分试图在编译时修改程序的另外一部分。装饰器就是把一个猴子,塞入炼丹炉,然后就出来一个还是会吃桃子,但有火眼金睛的猴子,还是原来的猴子,但是多了特效技能。
在这里解释一下元编程
在这篇博客里面讲的非常清楚,总结一下就是要理解在python中,一切皆对象,函数也不例外,同时还要理解当中的type魔法。Python黑魔法:元类与元编程 - 杜赛的博客https://www.dusaiphoto.com/article/142/
学习装饰器的先决条件
首先要理解这个例子,在这里把abs函数赋给了一个变量,然后这个变量就相当于成为了这个函数了。
注意,要恢复abs函数,需要重启python交互环境
其实这种将其他函数作为参数的函数在python中也称为高阶函数
回到装饰器
def decrator(func):
def inner(a, b):
print("I have decorated.", a, "and", b)
return func(a, b)
return inner
@decrator
def divide(a, b):
# return a/b
print(a/b)
# print(divide(2, 1))
decrator(divide(2, 10))
输出:
在这里将@
符号与装饰器函数的名称一起使用,并将其放在要装饰的函数的定义之上。就是上面的@decrator,执行过程就相当于用divide代替func。
作用
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。