闭包和万能装饰器

1.闭包
# 外层参数来自与函数名一致的调用(实参),可同时传递闭包外的函数的引用和其它参数多个参数(形参)

# 内层参数来自外层函数调用对象的调用(实参),同时传递给闭包外的对应函数以及它的调用(形参)

# 通过外层传递的只初始化一次,通过内层传递的初始化次数与调用次数一致。就跟变量在while true外面和里面一样


def set_func(b):
    def call_func():
        print(b)
        # f()
    return call_func


def test():
    print("t")
t = set_func("外层函数里面的变量内层直接使用,但是是在外层函数有参数的情况下,不然闭包就失去了存在的意义")
t()
def test2():
    print("t2")
t = set_func("外层函数里面的变量内层直接使用")
t()

2.闭包与函数的区别
# 格式上:闭包是两层函数的嵌套
# 作用:闭包的外层一定要有参数,传递给内层使用(否则闭包就没存在的意义,还不如用一层函数),外层函数返回内层函数的引用。

# 闭包:简化函数,多次使用的抽取成外层函数的参数。


def sum1(a, b, rate):
    print((a + b)*rate)

sum1(1000, 2000, 0.6)

sum1(2000, 3000, 0.6)

sum1(500, 200, 0.6)


def set_sum(rate):
    def sum2(a, b):
        print((a + b)*rate)
    return sum2

sum2 = set_sum(0.6)
sum2(1000, 2000)

sum2(2000, 3000)

sum2(500, 200)

3.万能装饰器
# 万能装饰器,有不定长参数,有返回值
def set_fun(func):
    def call_fun(*args, **kwargs):
        check()
        return func(*args, **kwargs)
    return call_fun


@set_fun
def deco_func(*args, **kwargs):
    print("deco_func")
    print(args,kwargs)
    return "万能装饰器"


def check():
    print("权限认证")


print(deco_func("yeah", a=3))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值