AOP面向切面的编程:将公用的模块提取出来,形成一个单独的组件。
装饰器:(1)扩展函数(2)AOP
一、闭包
在内部函数中去访问外部函数的变量,外部函数中直接返回内部函数名的调用。
def outer ():
x = 1
def inner():
print (x)
return inner
a=outer()
print (a. closure)
闭包条件:
1.嵌套函数
2.内部函数访问外围变量
3.外部函数return内部函数的名字
闭包使用的场景:
1.函数中有一些变量在被调用后,仍然希望保留
2.当函数需要扩展功能,但是又不能修改原来函数的名字。
二、装饰器
装饰器用来处理被装饰的函数,返回函数的函数名字,采用闭包的思想。
在不修改原来函数的基础上,对现有函数进行扩充,功能的扩展。
装饰器 @装饰的名字
装饰器的原理
装饰器的底层是使用闭包实现
原函数名=装饰函数(被装饰函数)
2.对装饰器的优化
(1)参数的优化,使用万能参数
(2)返回值
在inner中直接获取函数的返回值,作为inner的返回值即可
3.装饰器的叠加
使用装饰器
4.含有参数的装饰器
如果在装饰器中需要使用到其他的参数,那么可以采用在外侧包一层外部函数的方式解决。
在装饰原函数的时候,@装饰器(函数名)
注意:不要在装饰器的一层传入其他的参数,装饰器的一层只传函数名
5.保留函数的元信息
使用functools 下的wraps实现元信息的保留
6.类装饰器
实现装饰器的效果不仅仅可以使用装饰器函数,还可以使用类解决。