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

问题描述 投票:0回答: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

先谢谢你的帮助:)

python global-variables local python-module global-scope
1个回答
1
投票

可能有点争议,但你可以这样做。

import inspect

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

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

© www.soinside.com 2019 - 2024. All rights reserved.