为什么嵌套函数可以从外部功能访问的变量,但不允许对它们进行修改[复制](Why nested fun

2019-07-31 01:16发布

这个问题已经在这里有一个答案:

  • 在嵌套函数的Python覆盖变量 4个回答

在下面的第二种情况,巨蟒试图寻找一个局部变量。 如果它没有找到一个,为什么不能看在外部范围像它的第一种情况?

这看起来对于x在局部范围内,那么外范围:

def f1():
    x = 5
    def f2():
         print x

这使local variable 'x' referenced before assignment的错误:

def f1():
    x = 5
    def f2():
        x+=1

我不允许修改函数f2()的签名,所以我不能传递和返回x的值。 不过,我需要一种方法来修改X。 有没有办法明确告诉Python来寻找一个变量名外部范围(类似的东西global关键字)?

Python版本:2.7

Answer 1:

def f1():
    x = { 'value': 5 }
    def f2():
        x['value'] += 1

解决方法是使用对象的可变对象和更新成员。 名称绑定是在Python棘手,有时。



Answer 2:

在Python 3.X这是可能的:

def f1():
        x = 5
        def f2():
                nonlocal x
                x+=1
        return f2

这个问题并解决它,为Python 2.x的还有,在给出这个职位。 此外,请阅读PEP 3104有关该主题的更多信息。



文章来源: Why nested functions can access variables from outer functions, but are not allowed to modify them [duplicate]
标签: python scope