python - 执行 `from abc import xyz` 模块 `abc`去哪了?

标签 python module namespaces

关于 Python 内部结构的问题。如果我执行 import abc,Python 会将模块读入一个新的命名空间,并绑定(bind)全局命名空间中的变量 abc 以指向新的命名空间。

如果我执行 from abc import xyz 然后它读取整个模块 abc 到一些新的命名空间然后绑定(bind)变量 xyz全局命名空间到绑定(bind)到 xyz 的同一个对象,在这个新创建的命名空间中,模块被读入。至少这是我的理解。

之后 abc 被读入的命名空间发生了什么?我假设它存在于某个地方,因为 xyz 可能会访问该命名空间中的其他对象。这个“幽灵”abc 命名空间能否以某种方式访问​​?

此外,我假设如果我这样做

from abc import xyz
from abc import fgh

那么只有一个“幽灵”abc 命名空间,所以如果 xyzfgh 修改 中的同一个全局变量abc,只会有一份。对吗?

最佳答案

模块对象存储在sys.modules中。因此,如果您执行 from abc import xyz,则 sys.modules['abc'] 将为您提供 abc 模块对象。

关于python - 执行 `from abc import xyz` 模块 `abc`去哪了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481342/

相关文章:

python - 拼写测试检查不起作用(python)

python - 如何将字符串转换为嵌套列表,元素以逗号分隔

node.js - require().server.要求语句中带点

module - 如何在 OCaml 中使用集合?

java - 如何通过 Java 客户端和 Python 服务器通过套接字创建 IPC?

python - 在 Python 中打印函数地址的奇怪行为

python - 在 Python 中导入模块的文件夹

c# - VS 生成的 WSDL 命名空间问题

PHP 命名空间利用率

c# - 我可以设置 ReSharper 以将未导入的类用法重命名为它们的全名而不是导入它们的命名空间吗?