函数即变量高阶函数+嵌套函数》装饰器
装饰器:
定义:本质就是函数,(装饰其他函数)就是为其他函数添加附加功能
1.不能修改被装饰函数的源代码
2.不能修改被装饰函数的调用方式
高阶函数+嵌套函数 把一个函数名当做实参传给另外一个函数 返回值中包含函数名(不修改函数的调用方式)
#####没有修改被装饰函数的源代码但是改变了函数调用方式def login(): print("######test1#######") def auth(func): func() print("######auth#######") c = auth(login)
#######修改被装饰函数的源代码+没有修改被装饰函数的调用方式
def login():
print("######test1#######")
def auth(func):
def funnew():
func()
print("######auth#######")
return funnew
login = auth(login)
login()
####等价于:
def auth(func):
def funnew():
func()
print("######auth#######")
return funnew
@auth #等价于login = auth(login)
def login():
print("######test1#######")
login()
#以上是借助Python的@语法,把decorator置于函数的定义处
#如果说有多个函数需要同一个@auth,有的被装饰的函数带有参数,而有的函数却没有参数?
def auth(func):
def funnew(*args,**kwargs):
func(*args,**kwargs)
print("######auth#######")
return funnew
@auth #等价于login = auth(login)
def login():
print("######test1#######")
@auth
def login1(name,age):
print("######login1#######",name,age)
login()
login1("lili",23)