闭包和万能装饰器

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))

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭