python命名空间与作用域

岁酱吖の 提交于 2020-01-27 05:26:20

命名空间与作用域

一、命名空间:

保存程序中的变量名和值的地方,本质是一个字典,其作用是用来记录变量名称和值,变量名在字典中充当key,值充当value。

命名空间分为三种:

1.局部命名空间:函数都有自己的命名空间,记录函数的变量,参数。2.全局命名空间:模块拥有的空间,记录了模块变量,函数,类和导入模块。3.内置命名空间:任何模块均可访问,放着内置函数和异常。

对于命名空间在执行的过程需要注意两个容易混淆的东西:

第一个代码加载过程:

内置命名空间(程序运行前加载)­---->全局命名空间(当程序运行的时候加载全局命名空间)-----­>局部命名空间(函数调用的时候加载)

第二个查找顺序:

当前 (嵌套的或 lambda) 函数的命名空间中搜索 -->在父函数的命名空间中搜索 -->模块命名空间中搜索–>在内置命名空间中搜索 (在哪里查找到就停止搜索)

代码:
name="snowdream"     #全局命名空间
def func():           #局部命名空间
    name="snow"
    print(name)
func()

结果:

在这里插入图片描述

二、作用域:


是变量在程序中的可应用范围这里访问

的顺序容易与命名空间混淆,我们知道作用域分为四类:局部作用域(Loca)、嵌套作用域(Enclosing)、全局作用域(Global)、内建作用域(Built­in)。其中访问顺序为:局部作用域(Loca)–>嵌套作用域(Enclosing)–>全局作用域(Global)–>内建作用域(Built­in) [从第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程 中都没有找到,Python就会报错]总结:我认为命名空间和作用域的关系:命名空间定义了在某个作用域内变量名和绑定值之间的对应关系,命名空间是键值对的字典,作用域定义了命名空间中的变量能够在多大范围内起作用。

代码:

id=10  ##全局作用域
def outter():
    id=11     #嵌套作用域
    def inner ():
        id=12  #内建作用域
        print(id)
    inner()
outter()

结果:

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!