2014-05-12 75 views
-5

我是新来的Python和我在读取分配的问题:4种Python命名空间?

“的名字四种类型的命名空间在Python”

我从Java/C的背景和未来的我了解它的名称空间与范围有关吗?

我认为两种名称空间的类型是全局的和本地的?

+1

我猜他们是指本地,全球,模块和包...?不只是给你答案,但这应该让你开始继续你的研究。 –

+0

是的!我相信这是我需要的。谢谢! – user3629549

回答

0

最里面的范围,这是第一次搜索,包含本地名

中所有的封闭功能,这是搜索开始与最近的封闭范围的范围,包含非本地的,也有非全局名称

下一个到最后一个范围包含当前模块的全局名称

最外层的范围(最后搜索)是一个包含内置名字

1

An Introduction to Python by Guido van Rossum and Fred L. Drake, Jr.命名空间:

命名空间是从名称到对象的映射。 命名空间的例子有:内置名称的集合(像abs()这样的函数,如 ,以及内置的异常名称);在模块中的名称global; 和本地名称在函数调用。从某种意义上说,集合 对象的属性也形成一个名称空间。 (我的强调)

所以有四个命名空间。在Python3(但不是Python2)中,列表解析也是have their own namespaces。在这两个Python2和Python3生成器表达式有自己的命名空间,你可以从下面的代码引起的NameError看到:

In [175]: (1 for i in range(1)) 
Out[175]: <generator object <genexpr> at 0x3a47d0f4> 

In [176]: i 
NameError: name 'i' is not defined 

顺便说一句,涉及到一个范围,而不是一回事一个名字空间。而命名空间是名称和对象之间的映射,

作用域是Python程序的文本区域,其中一个命名空间是 直接访问。此处的“直接访问”表示对名称的非限定引用尝试在 名称空间中查找名称。 (我的重点)