零售/批发python

Python中的命名空间?

Python中的命名空间是什么?有什么作用?

参与8

2同行回答

youki2008youki2008系统架构师DDT
一、命名空间Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。 A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。在一个 ...显示全部

一、命名空间
Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。
A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。

在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。
1、每个函数都有着自已的命名空间,叫做 局部命名空间 ,它记录了函数的变量,包括函数的参数和局部定义的变量。
2、每个模块拥有它自已的命名空间,叫做 全局命名空间 ,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
3、还有就是 内置命名空间 ,任何模块均可访问它,它存放着内置的函数和异常。

二、命名空间查找顺序
当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
1、局部命名空间:特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。
2、全局命名空间:特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
3、内置命名空间:对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
4、如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,如, NameError: name 'aa' is not defined 。

嵌套函数的情况:
1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索
2、然后是在父函数的命名空间中搜索
3、接着是模块命名空间中搜索
4、最后在内置命名空间中搜索

三、命名空间的生命周期
不同的命名空间在不同的时刻创建,有不同的生存期。
1、 内置命名空间 在 Python 解释器启动时创建,会一直保留,不被删除。
2、模块的 全局命名空间 在模块定义被读入时创建,通常模块命名空间也会一直保存到解释器退出。
3、当函数被调用时创建一个 局部命名空间 ,当函数返回结果 或 抛出异常时,被删除。每一个递归调用的函数都拥有自己的命名空间。

Python 的一个特别之处在于其赋值操作总是在最里层的作用域。赋值不会复制数据——只是将命名绑定到对象。删除也是如此:"del y" 只是从局部作用域的命名空间中删除命名 y 。事实上,所有引入新命名的操作都作用于局部作用域。

收起
互联网服务 · 2020-04-27
浏览874
zftangzftang其它小白一枚
Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。在一个 Python 程序中...显示全部

Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。

A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。

在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。

1、每个函数都有着自已的命名空间,叫做 局部命名空间 ,它记录了函数的变量,包括函数的参数和局部定义的变量。

2、每个模块拥有它自已的命名空间,叫做 全局命名空间 ,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。

3、还有就是 内置命名空间 ,任何模块均可访问它,它存放着内置的函数和异常。

收起
互联网服务 · 2020-04-27
浏览780

提问者

tuomi2013
系统运维工程师广州某医药公司
擅长领域: 云计算python存储

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-04-27
  • 关注会员:3 人
  • 问题浏览:1409
  • 最近回答:2020-04-27
  • X社区推广