是否可以更改父框架中的绑定?

时间:2015-08-22 18:22:10

标签: python lexical-scope

我尝试创建闭包,其中父框架中存在绑定名称 inner ,只能通过return提供的方法访问它。 这是我的代码:

def test():
    inner = 'value'
    def get_inner():
        return inner
    def set_inner(v):
        inner = v
    return get_inner, set_inner


get, set = test()

set('hello world')

但是,当我实际调用 set_inner()并在body语句 inner = v 中评估在本地框架中创建的绑定时,但父框架中的绑定保持不变。

以下是它的外观:

enter image description here

你可以看到在 set_inner 功能的当前帧中创建了新的绑定,但是我希望能够显示父级的绑定。

我希望我已经明确表达了我想做的事情。

提前感谢。

编辑:

感谢MartijnPieters,我所要做的就是放置非本地声明:

def test():
    inner = 'value'
    def get_inner():
        return inner
    def set_inner(v):
        nonlocal inner
        inner = v
    return get_inner, set_inner

现在它改变了父框架中的绑定

0 个答案:

没有答案