万能装饰器的推导

# 装饰器用来装饰函数的,给函数添加额外的功能
# 装饰前的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()
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值