在任意导入函数中调用 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
基于
我正在尝试在从另一个文件导入的函数中调用 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
基于