Python调用函数的访问变量

2024-03-29 15:55:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的怀疑是,我想做的事情在Python中并不是完全可行的。下面是一些相互调用的嵌套函数。(一般来说,它们不必在词汇范围内,而是需要动态地相互调用。)

def outer() :
    s_outer = "outer\n"

    def inner() :
        s_inner = "inner\n"
        do_something()

    inner()

现在,当我调用do_something()时,我想访问调用函数的变量,在这个例子中是s_outers_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") )

工作得很好。

我的两个问题是

  1. 有没有更好的方法来解决这个问题?(除了将各自的数据包装成dict并将这些dict显式地传递给do_something()

  2. 有没有更优雅/更简短的方法来实现reach()函数?

干杯!


Tags: 方法函数nameinreturn定义def关键字