Python命名空间
2021-09-10 01:21:59 4 举报
Python命名空间
作者其他创作
大纲/内容
局部命名空间使用全局变量时与java不同,不能直接访问,要使用global关键字
main模块定义了一个mainMethod函数
Built-in namespace(内置命名空间)
python一切皆变量,所以函数、类、其他导入的模块也看作对象,在吗命名空间中有与之映射的内存地址。
Python解释器在启动的时候会首先加载内建名称空间,内建名称空间有许多名字到对象之间映射,而这些名字其实就是内建函数的名称,对象就是这些内建函数本身。
为什么Python自己创建的模块中能够直接使用内建函数?
使用import main导入时,mainMethod()还是属于自己的命名空间,所以要使用main.mainMethod()来调用。
Local namespace(局部命名空间)
全局命名空间:每个模块拥有自己的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其他导入 的模块、模块级的吧变量和常量。
命名空间可以解释import module与from module import的不同:1、全局命名空间(模块的命名空间)不仅仅包含模块级的变量和常量,还包含所有在模块中定义的函数和类。除此之外,它还包含了任何被导入到模块中的东西。2、import module,模块自身被导入,但是它保持着自己的命名空间,这就是为什么需要用模块名module.function来访问它的函数或者属性的原因。3、from moudle import function,实际上是从另一个模块中将指定的函数和属性导入到本模块的命名空间中,这就是为什么你可以直接访问他们,而不需要引用他们所来源的模块。
Global namespace(全局命名空间)
内置命名空间:任何模块均可以访问它,它存放着内置的函数和异常。
from main import mainMethod的方式导入时,在本模块的命名空间中可以看到存在函数mainMethod。这个mainMethod属于本模块的全局命名空间。
命名空间的生命周期: 1、内置命名空间在Python解释器启动时创建,会一直保留,不被删除。 2、模块的全局命名空间在模块定义被读入时创建,通常模块命名空间也会一直保存到解释器退出。 3、当函数被调用时创建一个局部命名空间,当函数返回结果或抛出异常时,被删除。每一个递归调用的函数都有自己的命名空间。
命名空间的查找顺序有内向外,如果有函数嵌套则先从最内层的命名空间开始查找。
局部命名空间:每个函数都有自己的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量。
可以使用locals()来访问局部命名空间,返回一个字典。
Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值。
可以使用globals()来访问全局命名空间
0 条评论
下一页