理解Python中的命名空间

时间:2011-12-12 16:13:39

标签: python namespaces

我需要帮助理解python中CS类的练习考试问题。该问题涉及python命名空间。这是一个问题:

Which of the following are true in Python?

i. Every function has access to the names in the builtin namespace.
ii. Every invocation of a function creates a new namespace nested within the calling function’s namespace.
iii. Invoking function G from function F adds the name G to F’s namespace
iv. The namespace of an imported module is always added to the builtin namespace.

a. i only
b. ii and iii only
c. i and iv only (answer)
d. i, ii and iii only
e. None of the above

有人可以解释为什么第二和第三个案件都是假的。或者指出一些解释命名空间的资源。感谢信。

1 个答案:

答案 0 :(得分:1)

For 2:新函数的命名空间不在调用函数的命名空间内:它是完全独立的。内部函数无法访问外部函数中使用的变量。调用创建了一个新的命名空间,但它没有嵌套在调用函数的范围内。

我不知道3,但这是有道理的。调用该函数并且不将名称添加到命名空间,因为它是不必要的。它没有添加到函数名称空间,因为它已经在全局名称空间(或类定义)中,并且通常可以假定函数根据需要对其进行适当的访问。一旦函数返回,引用将毫无用处,因此首先将它添加到命名空间是没有意义的。

命名空间基本上是谁能看到什么的问题。因此,一段代码只知道它可以访问的命名空间中的事物的定义。一个函数可以访问它自己的个人命名空间(其他函数看不到这个)和全局范围/命名空间(一切都可以看到这个)。可以把它想象成计算机上的文件目录。您可以拥有两个名称相同的文件,只要它们位于不同的目录中,并且命名空间很方便,因为大多数目录都与目录相同。命名空间有助于强制您组织代码并使其更加模块化,而不是在远程代码区域之间建立非常复杂的依赖关系,并且通常可以使您不必跟踪可能数百万行代码中的所有变量名称。