首页 > 解决方案 > 从另一个模块导入函数时,命名空间的概念是什么?

问题描述

主要.py:

from module1 import some_function
x=10
some_function()

模块1.py:

def some_function():
    print str(x)

当我执行时main.py,它在 moduel1.py 中给出一个错误,表明 x 不可用。

我的理解是from x import y在模块中使用main.py将 xy 的定义/值带到 main.py 的本地命名空间中。由于函数定义和变量 x 都在 main.py 的本地命名空间中,它应该可以正常工作。但这似乎是不正确的低估。那么这里的确切概念是什么?这个概念的官方 python 文档的任何链接?

标签: pythonpython-3.xpython-import

解决方案


冒着听起来轻率的风险,规则很简单:如果名称尚未在模块中定义,则它根本不存在。

看这个模块:

def some_function():
    print str(x)

它没有定义x,因此该模块中不存在该名称。如果您x另一个模块中定义,它仍然不会存在于该模块中。即使您将此模块导入到定义的其他模块中,该模块中x仍然不会x存在。

没有“全局global”命名空间。每个模块都有自己的global命名空间。名称永远不会在模块之间隐式共享,它们必须始终显式导入。

唯一的例外是builtins,为方便起见,它不需要显式导入。


推荐阅读