首页 » InfoTech »

Python的名字空间(namesapce)

2018年9月27日 / 8次阅读
Python

打开支付宝首页,搜索“529018372”,即可领取红包!可重复领。

特色图片

名字空间(namesapce)这个概念很枯燥,但是很重要,所以要耐心些。

Python使用叫做名字空间的东西来记录变量的轨迹(很多其它编程语言都有这个概念)。名字空间只是一个 字典,它的键字就是变量名,字典的值就是那些变量的值。实际上,名字空间可以象Python的字典一样进行访问。

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

当一行代码要使用变量 x 的值时,Python会到所有可用的名字空间去查找变量,按照如下顺序:

1, 局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用这个变量,然后停止搜索。

2, 全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python将使用这个变量然后停止搜索。

3, 内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python将假设 x 是内置函数或变量。

如果Python在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 的异常,同时传 递 There is no variable named 'x' 这样一条信息。

象Python中的许多事情一样,名字空间在运行时直接可以访问。特别地,局部名字空间可以通过内置的 locals() 函数来访问。全局(模块级别)名字空间可以通过 globals() 函数来访问。(用locals()和globals()函数查看Python符号表

 

python的名字空间,除了以上一般性的说明,还有更细致的层次划分,比如我们在函数中又定义了一个函数,函数嵌套定义,就在函数的局部空间和模块的全局空间中,产生了中间层次的局部空间。关于这个细节,请参考这篇文章:python的global和nonlocal

本文链接:http://www.maixj.net/ict/python-namesapce-18991
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

《Python的名字空间(namesapce)》有1条评论

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.

  • 麦新杰

    namespace在程序运行过程中,被动态的创建和销毁。比如函数的局部空间 ,在函数调用时创建,在函数返回后销毁。

    >>> def foo():
    ...     zz = 1
    ...
    >>> foo()
    >>> zz
    Traceback (most recent call last):
      File "", line 1, in 
    NameError: name 'zz' is not defined
    >>>
    zz这个变量不仅是在全局namespace不存在,在foo函数的局部空间,在foo函数返回之后也消失不见。 [ ]


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目

AD

ppdai

©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top