名称空间
名称空间的概念
名称空间(namespaces):
用于存放变量名和数据绑定关系的地方
1.内置名称空间
随着python解释器的运行而产生,关闭而销毁
2.全局名称空间
随着py文件类型的运行而产生,结束而销毁
3.局部名称空间
随着函数体代码运行而产生,结束而销毁
必须先确定自己所在的位置
1.在局部
局部 >>> 全局 >>> 内置
2.在全局
全局 >>> 内置
# 在函数内部查找顺序一开始就固定死了,不会因修改而修改
age = 18
def func():
def index():
age = 21
print('from index', age) # 得: form index 21
index()
age = 20
func()
age = 26
作用域:名称空间所能作用的范围
1.内置名称空间是和python解释器相关
在任何阶段任何位置皆可使用
2.全局名称空间是和py文件相关
在任何阶段任何位置皆可使用
3.局部名称空间和函数体相关
一般情况下只在各自的局部空间中使用
"""
如果想在局部修改全局数据可分为两种情况:
1.如果数据为可变类型,则直接修改即可。
2.如果数据为不可变类型,则使用关键字global声明
"""
# 1
name_list = ['jason', 'lili']
def index():
name_list.append('jerry')
index()
print(name_list) # 得:['jason', 'lili', 'jerry']
# 2
age = 18
def index():
global age # 将需要改变的数据写入
age = 20
index()
print(age) # 得:20
"""
如果想在内部的局部修改外部局部的不可变类型数据,
需要使用nonlocal声明
"""
def index():
age = 18
def func():
nonlocal age
age = 20
func()
print(age) # 得:20
index()
# 同级看同级,然后再看缩进,一步一步往下走。