我的怀疑是,我想做的事情在Python中并不是完全可行的。下面是一些相互调用的嵌套函数。(一般来说,它们不必在词汇范围内,而是需要动态地相互调用。)
def outer() :
s_outer = "outer\n"
def inner() :
s_inner = "inner\n"
do_something()
inner()
现在,当我调用do_something()
时,我想访问调用函数的变量,在这个例子中是s_outer
和s_inner
。
不幸的是,这里的nonlocal
关键字只有在inner()
函数内部定义do_something()
时才有帮助。但是,如果我将其定义为与outer()
相同的级别,那么nonlocal
关键字将不起作用。
但是,我想从各种其他函数调用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") )
工作得很好。
我的两个问题是
有没有更好的方法来解决这个问题?(除了将各自的数据包装成dict并将这些dict显式地传递给do_something()
)
有没有更优雅/更简短的方法来实现reach()
函数?
干杯!
目前没有回答
相关问题 更多 >
编程相关推荐