名称空间: 又名 name space, 顾名思义就是存放名字的地方, 存什么名字呢? 举例说明, 若变量 x=1,1 存放于内存中, 那名字 x 存放在哪里呢? 名称空间正是存放名字 x 与 1 绑定关系的地方
locals: 是函数内的名称空间, 包括局部变量和形参
globals: 全局变量, 函数定义所在模块的名字空间
builtins: 内置模块的名字空间
作用域查找顺序: LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
,locals 是函数内的名字空间, 包括局部变量和形参
,enclosing 外部嵌套函数的名字空间
,globals 全局变量, 函数定义所在模块的名字空间
,builtins 内置模块的名字空间
闭包
关于闭包, 即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数). 而且, 这些内部函数可以访问它们所在的外部函数中声明的所有局部变量, 参数. 当其中一个这样的内部函数在包含它们的外部函数之外被
调用
时, 就会形成闭包. 也就是说, 内部函数会在外部函数返回后被执行. 而当这个内部函数执行时, 它仍然必需访问其外部函数的局部变量, 参数以及其他内部函数. 这些局部变量, 参数和函数声明 (最初时) 的值是外部
函数返回时的值, 但也会受到内部函数的影响.
闭包的意义: 返回的函数对象, 不仅仅是一个函数对象, 在该函数外还包裹了一层作用域, 这使得, 该函数无论在何处调用, 优先使用自己外层包裹的作用域
装饰器
来源: http://www.bubuko.com/infodetail-2608320.html