名称空间Namespaces:存放名字与其对应的内存地址的地方
存放的是python解释器自带的名字
生命周期:解释器启动则产生,解释器关闭则销毁
存放的是顶级的名字
生命周期:py程序刚开始运行则立即产生,py程序结束则销毁
x = 10 # 全局
if True:
y = 2 # 全局
def foo():# foo顶级,全局
z = 3 # z不是顶级
存放的是函数内的名字
生命周期:函数调用则产生,函数调用结束则销毁
x = 5
def f1():
x = 10 # 只作用在局部
print(x)
f1()
# 10
L : 当前函数空间
E :外层函数空间
G :全局函数空间
B :内置函数空间
# name查看顺序:局部名称空间--->全局名称空间--->内置名称空间
# 需要注意的是:在全局无法查看局部的,在局部可以查看全局的
name = ‘tom1‘
def na():
name = ‘tom2‘
def na2():
name = ‘tom3‘
print(name)
na2()
print(name)
print(name)
na()
1、名字的访问优先级:
基于自己所在位置向外一层一层寻找,L->E->G->B
2、名称空间的‘嵌套’关系是在函数定义阶段,扫描语法时生成的,与调用位置无关
内置名称空间与全局名称空间属于该范围
特点:全局存活,全局有效
局部名称空间属于该范围
特点:临时存活,局部有效
用来在局部修改全局的不可变类型的值
用在局部修改局部的不可变类型的值,范围只在E
x = 10
def nax():
# global x
x = 5
def naa():
# global x
# nonlocal x
x = 3
naa()
print(x)
nax()
原文:https://www.cnblogs.com/BaiJiaZhengMing/p/14598319.html