名称空间
顾名思义就是存放名字的地方,比如,若变量x=1,1存放在内存里,那x存在哪里?名称空间就是存放名字x与1绑定关系的地方
x:内存地址 1所在的内存
名称空间共3种,分别如下:
locals:是函数内的名称空间,包括局部变量和形参
globals:全局变量,函数定义所在模块的名字空间
builtins:内置模块的名字空间
作用域的查找空间
作用域的查找顺序
LEGB
L:locals :函数的名字空间,包括局部变量和形参
E:enclosing 相邻的上一级 外部嵌套函数的名字空间
G:globls 全局变量,函数定义所在的模块名字空间
B:builtins 内置模块的名字空间
闭包
举例:
def func(): n = 10 def func2(): print("n=",n) return func2 f = func() f()
从理论上说,当f = func()时候,func已经关闭,那么n = 10这个内部局部变量就应该释放了,但是f()仍能够打印出10,这是为什么呢?
这就是闭包的概念
整改代码发生的现象就是一个闭包
f2是放在f里面,原来是根本拿不到f2,如果要执行只能在f里面执行
但是现在 f返回了f2名称 相当于在外部拿到了里面的函数。
即 func如果返回了内部的一个东西,并且还在使用中,那么他的内存空间不会释放的。
我们在外部可以执行内部的函数,并且可以用内部函数作用域里面的所有值,这就是闭包
装饰器
啊