文章目录
1.名称空间
名称空间就是—> 存放名字和对象映射/绑定关系(内存地址)的地方
如果你想访问一个变量值,必须要先访问对应的名称空间
例如:
对于x = 3,python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x —> 表示清除该绑定关系
2.名称空间的分类
内置名称空间:存放python解释器自带的名字。
在启动python解释器时就生效,关闭就失效
全局名称空间:文件级别(顶头写的名字)的名字。
在执行文件时生效,在文件结束或者在文件执行期间被删除的就失效
def func(): #func是全局的
pass
if 10>3:
y =333 #y 是全局的
x = 1
def f1():
def f2():
print(x)
f2()
f1()
局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放于局部内存空间)。
在调用当前函数时临时生效,函数体代码执行结束时失效。
加载顺序:内置名称空间 -->>全局名称空间–>>局部名称空间
名称空间的查找顺序:局部名称空间–>>全局名称空间–>>内置名称空间
len = 'global'
def f1():
# len = 1
def f2():
# len = 2
print(len)
len = 1
f2()
f1()
3.作用域
作用域:名称空间发挥作用的范围
4.作用域的分类
1、全局作用域:包含的是内置名称空间与全局名称空间的名字
特点: 只要程序一直执行,永久存活,若程序结束,则销毁
2、局部作用域:包含的是局部名称空间的名字
特点:只能在函数内使用,调用函数时生效,调用结束失效
补充
1、global:声明全局变量
def index():
global x #声明X是全局变量
x=2
print(x)
index()
print(x)
2、nonlocal:在局部名称空间声明局部变量,在局部修改外部(上层函数)的变量
def index():
x=1
def func():
nonlocal x
x=2
func()
print(x)
index()