名称空间与作用域
补充知识
栈区 / 堆区
-
栈区 : 存放的是变量名与变量值的内存地址映射关系
-
堆区 : 存放的是值真正的位置
名称空间
引入:
1.什么是名称空间?
-名称:定义的名字 空间:存放名字的地方
-名称空间即存放名字与对象映射/绑定关系的地方。
-名称空间只是虚拟的概念。栈区才是真正存在的。
2。名称空间有包含关系吗?
-名称空间之间本质是没有包含关系的,是互相独立的。
3.为什么要有名称空间?
-有了名称空间之后,就可以在栈区中存放相同的名字,让所有的名称不冲突。
4.查找名称空间的优先级是:
-在局部作用域查找名字时,起始位置是局部作用域,所以先查找局部名称空间,如果没有找到,再去全局作用域查找,还没有找到就在内置名称空间中查找,都没有找到就会抛出异常。
5.查找顺序:局部名称空间>>全局名称空间>>内置名称空间
6.三种全称空间的个数:内置、全局1只有一个。局部可以多个。
名称空间的分类(三类)
内建名称空间(也叫内置名称空间)
存放的名字:存放的是python解释器内置的名字
存活周期:python解释器启动则产生,python解释器关闭则销毁。
示例:
#例如:我们常用的内置函数
>>> len
>>> <built-in function len>
>>> print
>>> <built-in function print>
>>> input
>>> <built-in function input>
全局名称空间
存放的是顶级名字(文件级别的名字)
存活周期:在执行文件执行时生效,文件运行完毕或文件执行期间被删除则失效
x = 1 #全局名称空间
def foo(): #全局名称空间
y = 2
注意,"if"下面的定义的变量名都是全局的
if 1 > 0
z = 3 #全局
if 3 > 0:
p = 555 #全局
局部名称空间
存放函数内定义的名字
存活周期: 在调用函数时临时生效,函数调用完毕失效
示例一:
def f()
x = 222 #局部名称空间
f() #函数调用结束失效
示例二:
def func(a, b):
pass
下面
标签:作用域,高级,python,111,名称,func,空间,全局,def
From: https://www.cnblogs.com/xiao01/p/17904237.html