python - 从另一个模块导入函数时,命名空间的概念是什么?
问题描述
主要.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 文档的任何链接?
解决方案
冒着听起来轻率的风险,规则很简单:如果名称尚未在模块中定义,则它根本不存在。
看这个模块:
def some_function():
print str(x)
它没有定义x
,因此该模块中不存在该名称。如果您x
在另一个模块中定义,它仍然不会存在于该模块中。即使您将此模块导入到定义的其他模块中,该模块中x
仍然不会x
存在。
没有“全局global
”命名空间。每个模块都有自己的global
命名空间。名称永远不会在模块之间隐式共享,它们必须始终显式导入。
唯一的例外是builtins
,为方便起见,它不需要显式导入。
推荐阅读
- python - 从预测数据写入 excel 文件
- yii2 - Chartjs does not show on pdf in yii2 despite showing in html view
- xml - android:layout_gravity="bottom" 不起作用
- android - 迁移到 androidx 后,BottomNavigationView 膨胀错误
- android - 获取 URL,对 URL 更改执行操作并获取到 ParentActivity 的 URL
- javascript - Here Maps — 如何创建空折线?
- python - 如何编写python scrapy代码来提取站点站点地图中存在的url并将其导出到csv
- window - 使根窗口的覆盖窗口成为父窗口的可能性
- javascript - 用于选择/突出显示文本的多个部分的 Javascript
- haskell - 对对进行操作的映射函数