我想隐式将当前全局名称空间的引用传递到一个函数,以便我可以编辑它。我觉得这可能是可能的,因为exec()
这样做,但这可能太特别了。
垃圾邮件
# This will fail because globals() grabs the spam.py globals
# I would like to to grab the globals from wherever it was called from
def writeOtherGlobals( implicitGlobals=globals() ):
print "Got sausages", implicitGlobals['sausages']
implicitGlobals['sausages'] = 10
eggs.py
from spam import writeOtherGlobals
sausages = 5
writeOtherGlobals()
print sausages # I want this to print 10
import inspect
def get_globals():
return inspect.stack(1)[1][0].f_globals
此功能将在称为上下文的上下文中返回全球词典。
您可以使用'dir(模块(`方法,并排除__变量(忽略 name 等(,或者您可能想在该变量上添加一个变量模块的结尾很像:
#in module.py
a = ...
b = ...
# function/class definitions etc...
_globals = globals()
所以您现在可以做
# in anothermodule.py
import module
print module._globals
现在打印了所有的全球群体,您可以像在原始类中的globals((一样访问每个全球。
请注意,您不需要知道module.py
的名称才能起作用,只要您的模块具有._globals
,它的名称都无关紧要,即这起作用
def get_globals(module_py):
print(module_py._globals)