python名称空间及作用域
名称空间
存放名字的地方,是对栈区的划分,有了名称空间,可以在栈区中存放相同的名字
- 内置名称空间
存放python解释器内置的名称 存活周期:python解释器启动-关闭 >>> print <built-in function print> >>> input <built-in function input>
- 全局名称空间
运行顶级代码所产生的名字,或者说不是函数内定义,也不是内置的,剩下的就是全局名称空间 存活周期:代码开始执行产生,执行完毕后销毁
- 局部名称空间
在调用函数时,运行函数体代码中产生的名字 存活周期:函数调用时产生,函数调用完毕后销毁
- 名称空间的加载顺序:内置名称空间>全局名称空间>局部名称空间
- 名称空间的销毁顺序:局部名称空间>全局名称空间>内置名称空间
- 名称查找优先级:当前所在位置向上一层一层查找
- 名称空间的嵌套关系:只跟定义时的空间有关
作用域
- 全局作用域:内置名称空间、全局名称空间
- 局部作用域:局部名称空间
gloabal与nonlocal
gloabal x --->x是全局作用域中名称可以修改全局变量 nonlocal x---->以当前位置为起点向外寻找,终止位置是最外层函数体