当前位置: 首页 > 后端技术 > Python

Python命名空间和作用域

时间:2023-03-26 18:43:10 Python

Namespace命名空间(namespaces):用来存放名字和内存地址绑定关系的地方,也就是栈区的划分:名字空间可以存放栈区中相同的名字,从而解决命名冲突的名字空间分为三种类型:内置命名空间、全局命名空间、局部命名空间、内置命名空间、内置命名空间:用于存放Python解释器中的内置名称。生命周期:Python解释器启动时产生,Python解释器关闭时销毁。例如:print,input,int...globalnamespace全局命名空间:运行顶层代码生成的名称,或者说,除了函数中的定义和内置的,其余就是全局命名空间生命周期:Python文件执行时产生,Python文件执行完成后销毁例如:#变量名aa=1#函数名funcdeffunc():pass#类名MyClassclassMyClass:传递局部命名空间local命名空间:调用函数时,函数体代码运行过程中产生的函数名生命周期:调用函数时产生,函数调用后销毁例如:deffunc(x,y):passfunc(1、2)命名空间的顺序命名空间加载顺序:内置命名空间->全局命名空间->本地命名空间命名空间销毁顺序:本地命名空间->全局命名空间->内置命名空间名称查找优先级:从当前位置到一个分层searchscopeGlobalScope全局作用域:Built-inNamespace,全局命名空间特性:全局生存Globallyvalid:所有函数共享localscopelocalscope:局部命名空间特性:临时生存localvalid:函数内有效——Builtin(Python);Python内置模块命名空间(built-inscope)G——Global(module);functionexternalnamespace(globalscope)E——封闭函数局部变量;externalnestedfunctionScope(嵌套作用域)L——Local(函数);当前函数中的作用域(localscope)按照就近原则,从下到上,从内到外查找global和nonlocalglobal:声明的全局变量被修改全局变量nonlocal:修改局部变量(局部变量在当前函数的上层)#globalx=1deffunc():globalxx=2func()print(x)#nonlocaldeffunc1()的使用:x=1deffunc2():nonlocalxx=2func2()print(x)func1()总结命名空间是对栈的划分,真正存在的是栈区。命名空间只是一个虚拟的划分。命名空间只有优先级,没有嵌套关系。名称空间的“嵌套关系”决定了搜索名称的顺序。命名空间的“嵌套关系”是基于函数定义阶段的。