【问题标题】:Can I access a module object if it has only been imported via "from module import *"?如果仅通过“从模块导入 *”导入模块对象,我可以访问它吗?
【发布时间】:2015-10-26 07:23:14
【问题描述】:

我有一些文件定义了我想在文件之外使用的全局变量,例如“func.py”包含:

def init():
  global a
  a = 5

如果我通过“from x import *”导入,那么像这样访问模块的全局变量是行不通的:

from func import *
init()
a
func.a

因为afunc 都没有定义。但是,“func”在 sys.modules.keys() 中列出。

我知道“from x import *”并不是最佳实践,但是在使用时如何访问模块的变量或模块对象?

【问题讨论】:

  • func.py 是一个完整的 python 脚本吗?在您的情况下,您需要在“init”之外声明“a”并使用“global”关键字在“init”中引用“a”。函数中的“全局”会告诉 python 在该函数的“外部”查找该变量。当使用'from ... import ...'时,预计'func'是未定义的。如果需要,请使用'import ...'
  • 在这个例子中它只是一个函数的集合,但我想它是普遍适用的。

标签: python python-import


【解决方案1】:

除了“正确”导入模块之外,我还没有找到其他方法。

import func
from func import *
init()
func.a

This question 密切相关。 This one 暗示由于模块是使用任一命令完全导入的,因此也没有真正的性能差异。 This suggestion 为大型项目使用带有全局变量的单独文件/容器也值得一提。

显然,如果您无能为力,请勿在实时故障排除之外使用“from x import *”。

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2016-07-30
    • 1970-01-01
    • 2023-04-02
    • 2017-08-28
    相关资源
    最近更新 更多