我试图调用 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
先谢谢你的帮助:)
可能有点争议,但你可以这样做。
import inspect
def fun(): #some function in another module
caller_globals = inspect.stack()[1][0].f_globals
#do what you want