我如何隐式地通过Python中当前的全局名称空间



我想隐式将当前全局名称空间的引用传递到一个函数,以便我可以编辑它。我觉得这可能是可能的,因为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)

相关内容

  • 没有找到相关文章

最新更新