2011-03-21 67 views
7

例如: assginment语句将声明一个新的局部变量。Python,如何更改父范围中变量的值?

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

利用全球宣言将在全局foo的:

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

我怎样才能改变FUNC1范围变富?
感谢您的帮助。

编辑:

谢谢布兰登克雷格·罗德,我终于明白你的意思。

如果嵌套的范围超过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 

如果有嵌套的三个以上的功能,
和各功能使用的变量在其他函数范围内,
为什么我们不声明全局列表变量?
谢谢你的帮助!

回答

8

在Python 3中,我相信您可以使用nonlocal关键字来获得修改封闭非全局作用域中变量的权限。在Python 2中,您不能在封闭范围内重新指定foo;相反,设置foo等于像一个列表[]可变对象,然后坚持你想存储在列表中的值:

def func1(): 
    foo = [None] 
    def func2(): 
     foo[0] = 'Test' 
+0

谢谢,这确实有帮助。但只是在想象中,如果嵌套的功能超过3个,那么该怎么办?请您多帮忙,谢谢。 – netroyal 2011-03-21 03:38:57

+0

谢谢。我终于明白你的意思了。如果有多于两个函数嵌套,则可以使用foo [1,2,3]将每个值存储在foo [0] foo [1] foo [2]元素中。再次感谢你! – netroyal 2011-03-21 04:00:08

4

在蟒蛇3.0及以上版本,你可以使用外地关键字。