【发布时间】:2016-07-28 15:20:52
【问题描述】:
关于 Python 内部的问题。如果我执行import abc,那么 Python 会将模块读入一个新的命名空间,并将全局命名空间中的变量 abc 绑定到新的命名空间。
如果我执行from abc import xyz,那么它会将整个模块abc 读取到某个新的命名空间中,然后将全局命名空间中的变量xyz 绑定到在这个新创建的命名空间中绑定到xyz 的同一个对象模块被读入的位置。至少这是我的理解。
之后读入abc 的命名空间会发生什么情况?我假设它存在于某个地方,因为xyz 可能会访问该命名空间中的其他对象。这个“幽灵”abc 命名空间可以通过某种方式访问吗?
另外,我假设如果我这样做了
from abc import xyz
from abc import fgh
那么abc命名空间只有一个“幽灵”,所以如果xyz和fgh修改abc中的同一个全局变量,就只有一份。对吗?
【问题讨论】:
-
这只是出于好奇吗?没有真正的理由尝试像这样“秘密”访问模块;如果要访问模块对象,只需正常导入即可。
-
只是出于好奇,试图了解事情在幕后是如何运作的。我做了很多数据工作,考虑将其中一些工作从 R 转移到 Python,所以只是建立一个理解。
标签: python module namespaces