python3-闭包

闭包&LEGB法则

所谓闭包,就是将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象

00001. 闭包最重要的使用价值在于:封存函数执行的上下文环境

闭包在其捕捉的执行环境(def语句块所在上下文)中,也遵循LEGB规则逐层查找,直至找到符合要求的变量,或者抛出异常。

  





运行结果:

 

def line_conf(a, b):
    def line(x):
        return a*x + b
    return line
line1 = line_conf(1, 1)
line2 = line_conf(4, 5)
print(line1(5))
print(line2(5))

 

装饰器:

装饰器&语法糖(syntax sugar)

上文提到闭包的重要特性:封存上下文,这一特性可以巧妙的被用于现有函数的包装,从而为现有函数加功能。而这就是装饰器。

 

装饰器的原则及构成:
原则:
1、不能修改被装饰函数的源代码。
2、不能修改被装饰函数的调用方式。
3、不能改变被装饰函数的执行结果。
装饰器对被装饰函数是透明的。

def diguo():
    print("底锅50")
    return 50
def doupi(fn):
    def jiadoupi():
        print("麻酱豆皮10")
        return fn()+10
    return jiadoupi
def xiangcai(fnn):
    def jiaxiangcai():
        print("麻酱香菜5")
        return fnn()+5
    return jiaxiangcai
aa=doupi(xiangcai(diguo))
print(aa())

 

猜你喜欢

转载自blog.csdn.net/q41881106/article/details/80640520