名称空间

名称空间的概念 

名称空间(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.局部名称空间和函数体相关
          一般情况下只在各自的局部空间中使用

 

global与nonlocal关键字使用

"""
如果想在局部修改全局数据可分为两种情况:
    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()

# 同级看同级,然后再看缩进,一步一步往下走。

 

 

 

 

posted @ 2021-11-16 16:22  代小白菜  阅读(41)  评论(0)    收藏  举报