目录
1. 作用域(LEGB) |
正文
作用域(LEGB)
LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__ |
闭包是什么?
闭包(Closure),又称函数闭包,是引用了自由变量的函数。 |
为什么要用闭包?
(1)闭包避免使用全局变量 |
为什么通过闭包能实现在函数之外访问函数的局部变量?
def adder(x): |
所有函数都有一个 closure属性,如果这个函数是一个闭包的话,那么它返回的是一个由 cell 对象 组成的元组对象。cell 对象的cell_contents 属性就是闭包中的自由变量。
>>> adder.__closure__ |
这解释了为什么局部变量脱离函数之后,还可以在函数之外被访问的原因的,因为它存储在了闭包的 cell_contents中了。