首页 > 怎样在函数内定义的函数中访问外层函数的变量?

怎样在函数内定义的函数中访问外层函数的变量?

python 2,不能用 三的nonlocal
我需要在一个函数内定义一个新的函数,且这个内部函数可以访问外部函数的变量
我做了如下尝试,但结果不对: 结果是2 4 6 6 6 6,我希望的结果是2 4 6 6 4 2

def outer(s):
    if s == 4:
        return
    outer.OuterVar = s
    def inner():  #这里不能用lambda因为实际情况下这个函数内部有非常多的内容
        outer.OuterVar = outer.OuterVar * 2
    inner()
    print outer.OuterVar,
    outer(s+1)
    print outer.OuterVar,
if __name__ == "__main__":
    outer(1)

补充说明一下

我希望的代码是这样的,注释掉的代码那行会报错。

def outer(s):
    if s == 4:
        return
    OuterVar = s
    def inner():
        pass
        #OuterVar = OuterVar * 2
    inner()
    print OuterVar,
    outer(s+1)
    print OuterVar,
if __name__ == "__main__":
    outer(1)

class Namespace: pass

def outer(s):
    if s == 4:
        return
    ns = Namespace()
    ns.OuterVar = s

    def inner():
        ns.OuterVar = ns.OuterVar * 2
    inner()

    print ns.OuterVar,

    outer(s+1)

    print ns.OuterVar,
if __name__ == "__main__":
    outer(1)

运行效果:

参考来源:
http://www.saltycrane.com/blog/2008/01/python-variable-scope-notes/#ex7-set-outer-workaround

你的代码没达到你要的效果, 是因为你一直使用的是同一个对象.

【热门文章】
【热门文章】