1

我试图globals()在从另一个文件导入的函数内部调用,以检索程序的全局定义值。

但是,它给出的字典与在函数外部调用时的字典不同。

我知道这是注定要发生的,因为这里说:

globals 表字典是当前模块的字典(在函数内部,这是定义它的模块,而不是调用它的模块)。

但是是否有任何技巧或其他函数可以使其globals()表现得好像它被调用了__main__

这个问题很容易重现。例如,输入foo.py

def get_globals():
    return globals()

然后在主程序中:

from foo import get_globals()

main_globals = globals()

foo_globals = get_globals()

main_globals == foo_globals
Out [1]: False

但是,有没有办法让最后一行阅读:

main_globals == foo_globals
Out [2]: True

提前感谢您的帮助:)

4

1 回答 1

1

可能有点争议,但给你。

import inspect

def fun(): #some function in another module
    caller_globals = inspect.stack()[1][0].f_globals
    #do what you want 

基于从调用者的全局变量中获取变量。什么是框架对象?

于 2020-06-12T16:50:56.277 回答