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
你的代码没达到你要的效果, 是因为你一直使用的是同一个对象.