装饰器的理解
参考大佬文章:http://python.jobbole.com/86632/
什么是装饰器?
装饰器本质上是一个python函数,他可以让其他函数在不需要发生任何改动的情况下为其添加额外的功能,
它的实现原理就是闭包,它接受一个函数作为参数,内部对其进行包装,再返回一个新的功能完善的函数
使用场景:增加权限校验,日志记录等
例子:
业务函数:
def f1():
print('f1')
def f2():
print('f2')
def f3():
print('f3')
装饰器:
def super_f(fun):
def inner():
#新增功能
return fun()
return inner
把原来的业务函数塞进装饰器中的内嵌函数,再返回一个新的功能完善的函数
装饰器的使用:
@super_f
f1()
@super_f
f3()
@super_f
f3()
执行原理解释:
@super_f
f1()
装饰器语法糖的原理(f1为例):
1.将函数f1()作为参数传入装饰器中
2.在装饰器内部,将传进来的函数塞进内嵌函数(return f1(),将f1的执行过程塞进新函数),
3.将这个新的功能更加完善的内嵌函数返回出来(return super_f)
4.此时再执行f1()就相当于执行被塞进了f1()功能的inner()函数
*如果被装饰的函数有参数:就把形参写在装饰器的内嵌函数中 /如果参数个数不确定的话可以用*args **kwargs来代替
*一个函数可以被多个函数装饰:写法如下:
@super_f1
@super_f2
f1()