我在子模块中有一个函数,它需要像这样操作来自父/解释器全局变量(断言、验证)的变量:
import mymodule
mymodule.fun_using_main_interpreter_globals1()
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它会起作用:
mymodule.fun_using_main_interpreter_globals1(explicit_pass= globals() )
Run Code Online (Sandbox Code Playgroud)
但是,如果我不明确地传递 globals(),我如何才能将解释器/父 globals() 访问到我的子模块中?
在 IPython 中,它可以放在配置文件设置中。
我从来没有真正涉足过这个领域,但查看文档应该可以做到这一点:
caller_globals = dict(inspect.getmembers(inspect.stack()[1][0]))["f_globals"]
Run Code Online (Sandbox Code Playgroud)
inspect模块允许您访问 python 解释器堆栈等。第二个元素(通过 访问[1])是调用者,堆栈帧是元组的第一个元素(通过 访问[0]),它包含该上下文(名为f_globals)的当前全局字典作为成员。
请注意,这将返回globals() 调用者的,而不是被调用函数是其子模块的模块。一般来说,我认为这是不可能的,因为同一模块可以是不同模块的子模块(子模块只是模块中的全局模块,不同的模块可能共享相同的子模块对象)。