2.名称空间
名称空间就是内存中存放变量名和变量值绑定的地方。
名称空间分类:
(1)内置名称空间
python解释器 运行开始产生的名称空间,python解释器运行结束则释放,
例如len(), open(), del, print()
(2)全局名称空间
py文件运行开始产生的名称空间,py文件运行结束则释放,包括里边代码块中产生的变量。
例如
if True:
a = '123'
全局变量 name = '123'
if True:
a = 123 #123
print(a) #这就能解释为啥a没有全局定义,只在某个代码块内定义,但是在输出时,能够输出出来。这就是全局名称空间。
def func():
b=12
func()
print(b) #报错b未定义
(3)局部名称空间
方法运行开始产生的名称空间,方法执行结束则释放。
def func():
age = 12
这就涉及到变量的查找顺序:
在方法内,优先查找局部命名空间,然后查找全局命名空间,最后查找内置命名空间。
错题:
a = 1
def func():
print(a) #这里会报错,因为python解释器发现局部变量中有a,并且a=2,于是就不再适用a=1, 但是在解释执行时,发现a的定义在后边,于是报错。
a=2
print(a)
作用域:命名空间的作用范围就是作用域
如果在局部作用域中想要修改全局变量,有两种情况:
(1)如果在局部变量中想要修改全局的可变类型,直接修改即可,也就是list/dict在方法中被修改了,直接就改了
(2)如果在局部变量域中修改不可变类型,需要提前声明, global 变量名。
标签:作用域,print,错题,查找,名称,空间,全局 From: https://www.cnblogs.com/lhg37927/p/16822486.html