如何从模块命名空间中获取全局变量?

10

有没有一种方法可以获取特定模块命名空间中包含全局变量的字典?看起来,如果该模块包含至少一个函数并且使用以下内容,则可以实现:

import mymodule
d = mymodule.func.__globals__

这样做正确吗?

有更通用的方式吗?(例如,如果模块不包含任何函数而只包含变量,该如何处理?)

我并不希望得到一个“你想用那个做什么?可能还有其他方法。”的回答;我的问题更多是理论上的。

如果有影响的话,我更感兴趣的是Python3的答案。

1个回答

23

只需使用vars,它会抓取其对应于全局作用域的__dict__

vars(mymodule)

func.__globals__ 仅为您返回此字典,如下所示:

vars(mymodule) is mymodule.func.__globals__

返回 True


1
或者直接使用它的 __dict__。我一直更喜欢 __dict__。少了一个括号嵌套的层级。 - user2357112
1
谢谢,这正是我在寻找的。 - Thomas Baruchel
1
@user2357112,我个人不太喜欢使用dunders,而是选择函数版本来代替(即使__dict__可能永远不会改变,但我还是有点多虑)。 - Dimitris Fasarakis Hilliard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接