在任意导入函数中调用 globals() 函数?

Calling the globals() function inside an arbitary imported function?

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

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

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

The globals table dictionary is the dictionary of the current module (inside a function, this is a module where it is defined, not the module where it is called).

但是是否有任何技巧或其他函数使 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

提前感谢您的帮助:)

可能有点争议,但就这样吧。

import inspect

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

基于