我的怀疑是,我想做的事情在 Python 中以一种干净的方式不太可行。下面是一些相互调用的嵌套函数。(一般来说,它们不必在词法范围内,但需要动态地相互调用。)
def outer() :
s_outer = "outer\n"
def inner() :
s_inner = "inner\n"
do_something()
inner()
现在,当我调用时,do_something()
我想进一步访问调用堆栈中调用函数的变量,在这种情况下s_outer
和s_inner
.
不幸的是,这里的关键字只有在我在函数内部nonlocal
定义时才对我有帮助。但是,如果我将其定义在与该关键字相同的级别,则该关键字将不起作用。do_something()
inner()
outer()
nonlocal
但是,我想do_something()
从其他各种函数调用,但总是在它们各自的上下文中执行它并访问它们各自的范围。
感觉很顽皮,然后我写了一个小访问器,我可以do_something()
像这样从内部调用它:
def reach(name) :
for f in inspect.stack() :
if name in f[0].f_locals : return f[0].f_locals[name]
return None
接着
def do_something() :
print( reach("s_outer"), reach("s_inner") )
工作得很好。
我的两个问题是这些
有没有更好的方法来解决这个问题?(除了将各自的数据包装成字典并将这些字典显式传递给
do_something()
)是否有更优雅/更简洁的方式来实现该
reach()
功能?
干杯!