# 装饰器用来装饰函数的,给函数添加额外的功能
# 装饰前的test是由func指向的
# 装饰后的test 是call_fun
# 函数的情况有四种:
# 1.无参,无返回
# 2.无参,有返回
# 3.有参,无返回
# 4.有参,有返回
###############################1.无参,无返回##################
def set_fun(func):
def call_fun():
print("添加权限")
func()
return call_fun
@set_fun # @set_fun ==> test = set_fun(test)
def test():
print("test")
# test()
########################## 2.无参,有返回#######################
# 装饰前test是func指向的
# 装饰后的test 是call_fun
def set_fun(func): # func就是原先的test
def call_fun():
return func()
# return "123"
return call_fun
@set_fun # @set_fun ===> test = set_fun(test)
def test():
return "123"
# 装饰器的原则 就是不改变原先函数的调用方式,原先函数的值
# value = test() # 这个调用就是call_fun
# print(value)
#################### 3.有参,无返回##########################
# 装饰前test,func指向
# 装饰后test就是call_fun
# 装饰前跟装饰后调用方式不要改,值不要改
def set_fun(func):
def call_fun(value):
print("添加权限")
func(value)
return call_fun
@set_fun # @set_fun ==>test = set_fun(test)
def test(value):
print(value)
# test(123) # call_fun调用
#######################4.有参,有返回######################
# 装饰前test,func指向
# 装饰后test就是call_fun
# 装饰前跟装饰后调用方式不要改,值不要改
def set_fun(func):
def call_fun(value):
print("权限认证")
return func(value)
return call_fun
@set_fun # @set_fun ===> test = set_fun(test)
def test(value):
return value
# value = test(123)
# print(value)
##################不定长参数,有返回##########################
# 装饰前test,func指向
# 装饰后test就是call_fun
# 装饰前跟装饰后调用方式不要改,值不要改
def set_fun(func):
def call_fun(*args, **kwargs):
print(args) # 元组
print(kwargs) # 字典
return func(*args, **kwargs) # 拆包
return call_fun
@set_fun # @set_fun ==> test = set_fun(test)
def test(*args, **kwargs):
print(args)
print(kwargs)
return "100"
# test(1, 2)
value = test(1, 2, a=1, b=2)
print(value)
# test()