闭包&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())