装饰器
什么是装饰器
器->工具。
装饰->指的是为被装饰对象添加新功能。
装饰器本身可以是任意可调用的对象->函数。
被装饰对象也可以是任意可调用的对象->函数。
目标:写一个函数来为另一个函数添加新功能。
为何要用装饰器
开放封闭原则:软件一旦上线。就对修改封闭,对扩展开放。
对修改封闭:
不能修改功能的源代码。
也不能修改代码的调用方式。
对扩展开放:
可以为原有功能添加新的功能。
用装饰器的目的就是在不修改功能源代码以及调用方式的前提下,为其添加新的功能。
如何用装饰器
利用两层闭包函数为核心语法为程序实现某些功能。
装饰器的语法糖@
@语法糖的名字要在被装饰对象的正上方一行单独写入。
有参装饰器
模板:def outter2(xxx,yyy):
def outter(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
print(xxx) print(yyy)
return res
return wrapper
return outter
在传值已经饱满,无法在进行传值的情况下,利用添加一层闭包函数来实现目的。
global和nonlocal
global:在局部声明变量为全局变量,用来在局部修改全局变量。
nonlocal:在局部中声明变量是外层函数的变量,无法受全局变量影响。