名称空间与作用域

1. 什么是名称空间和作用域

变量到底是什么,我们从前面学习的知识可知道,定义了一个变量后,变量名就会指向变量值,这种关系与字典很像,变量值存放在变量名指向的内存空间地址,那么变量名存放在什么地方呢?其实在Python中有专门的区域存放变量名,这和空间就称为名称空间。

2. 名称空间

  • 内置名称空间:存放Pyhton解释器自带的名字,在python解释器启动时有效,python解释器关闭后失效
  • 全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,在文件执行时生效,文件执行结束后失效
  • 局部名称空间:用于存放函数调用期间函数体产生的名字,在文件执行调用函数时生效,函数调用结束后失效
  • 加载顺序:内置名称空间 -> 全局名称空间 -> 局部名称空间
  • 查找顺序:当前名称空间 -> (内置名称空间 -> 全局名称空间 -> 局部名称空间)

3.作用域

  • 全局作用域:全局有效,全局存活,包含内置名称空间和全局名称空间。
  • 局部作用域:局部有效,临时存储,只包含局部名称空间。
  • 注意:作用域关系在函数定义阶段就固定死了,与函数的调用无关。
  • global:修改全局作用域中的变量
def test():
    global x
    x = 1
    
x = 3
test()
print(x)  # 不申明之前结果为3,申明之后修改为1
  • nonlocal:修改局部作用域中的变量。
def test():
    x = 1
    def test1():
        nonlocal x
        x = 2
    test1()
    print(x)  # 不申明之前为1,申明之后修改为2
    
x = 3
test()
print(x)  # 3,因为没有申明全局变量,保持不变
posted @ 2019-08-11 20:00  油饼er  阅读(145)  评论(0编辑  收藏  举报