例如: assginment语句将声明一个新的局部变量。
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范围内更改变量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
如果嵌套的函数超过三个,
并且每个函数在其他函数范围内使用变量,
为什么我们不申报全局列表变量?
感谢您的帮助!!!
答案 0 :(得分:9)
在Python 3中,我相信,您可以使用nonlocal
关键字来获取修改封闭的非全局范围内的变量的权限。在Python 2中,您无法在封闭范围内重新分配foo
;相反,将foo
设置为类似于列表[]
之类的可变对象,然后将您想要存储的值保存在列表中:
def func1():
foo = [None]
def func2():
foo[0] = 'Test'
答案 1 :(得分:4)
在python 3.0及更高版本中,您可以使用nonlocal关键字。