在python中修改内部函数的函数变量

时间:2012-12-21 06:58:57

标签: python function variables scope

可以获取并打印外部函数变量a

def outer():
    a = 1
    def inner():
        print a

获取外部函数数组a并附加某些内容

也可以
def outer():
    a = []
    def inner():
        a.append(1)
        print a

但是,当我尝试增加整数时,它会造成一些麻烦:

def outer():
    a = 1
    def inner():
        a += 1 #or a = a + 1
        print a

>> UnboundLocalError: local variable 'a' referenced before assignment

为什么会发生这种情况?如何实现目标(增加整数)?

3 个答案:

答案 0 :(得分:4)

在Python 3中,您可以使用nonlocal关键字执行此操作。在nonlocal a开头innera标记为非本地。

在Python 2中,这是不可能的。

答案 1 :(得分:3)

通常更清洁的方法是:

def outer():
    a = 1
    def inner(b):
        b += 1
        return b
    a = inner(a)

Python允许很多,但非局部变量通常可以被视为“脏”(这里不再详述)。

答案 2 :(得分:3)

Python 2的解决方法:

def outer():
    a = [1]
    def inner():
        a[0] += 1
        print a[0]