装饰器:
1 什么是装饰器
器=>工具
装饰=>指的是为被装饰对象添加新功能
装饰器本身可以是任意可调用的对象=>函数
被装饰的对象也可以是任意可调用的对象=>函数
目标:写一个函数来为另外一个函数添加新功能
2 为何要用装饰器
开放封闭原则: 软件一旦上线就应该对修改封闭,对扩展开放
对修改封闭:
1. 不能修改功能的源代码
2. 也不能修改功能的调用方式
对扩展开发:
可以为原有的功能添加新的功能
装饰器就是要在不修改功能源代码以及调用方式的前提下为原功能添加额外新的功能
3 如何用
# 无参装饰器的模板
# def outter(func):
# def wrapper(*args,**kwargs):
# res=func(*args,**kwargs)
# return res
# return wrapper
# 有参装饰器
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:在局部声明变量是外层函数的变量