13

例如:assginment 语句将声明一个新的局部变量。

foo = 'global'
def func1():
    foo = 'func1'
    def func2():
        foo = 'local variable in func2'

use global 声明将在 global 中使用 foo:

def func2():
    global foo
    foo = 'global changed in func2'  #changed the foo value in global scope

如何更改 func1 范围内的变量 foo?
谢谢你的帮助。

编辑:

谢谢Brandon Craig Rhodes,我终于明白你的意思了。

如果嵌套的范围超过 3 个,我可以将变量存储在列表中。

foo = ['global', 'function1', 'function2']
def func1():
    foo[1] = 'func1'
    def func2():
        foo[2] = 'func2'
        foo[1] = 'func1 modified in func2'

我实际上只是使用了一个全局变量。


所以,如果有两个函数嵌套,我们可以使用

nonlocal foo 

global foo 

如果嵌套了三个以上的函数,
并且每个函数都使用其他函数范围内的变量,
为什么不声明一个全局列表变量呢?
谢谢你的帮助!!!

4

2 回答 2

17

我相信在 Python 3 中,您可以使用nonlocal关键字来获得在封闭的非全局范围内修改变量的权限。在 Python 2 中,您不能foo在封闭范围内重新分配;相反,设置foo等于一个可变对象(如列表[]),然后将您想要存储在列表中的值粘贴:

def func1():
    foo = [None]
    def func2():
        foo[0] = 'Test'
于 2011-03-21T03:01:40.410 回答
7

在 python 3.0 及更高版本中,您可以使用 nonlocal 关键字。

于 2011-03-21T03:01:52.787 回答