【问题标题】:Python, how can I change value of a variable in the parent scope?Python,如何更改父范围内变量的值?
【发布时间】:2011-07-19 09:43:51
【问题描述】:

例如: 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 

如果嵌套的函数超过三个,
并且每个函数都使用其他函数范围内的变量,
为什么我们不声明一个全局列表变量?
感谢您的帮助!!!

【问题讨论】:

    标签: python scope global python-nonlocal


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这真的很有帮助。但是只是在想象中,如果嵌套了 3 个以上的函数会怎样?请您提供更多帮助吗?谢谢。
    • 谢谢。我终于明白你的意思了。如果嵌套了两个以上的函数,您可以使用 foo[1, 2, 3] 将每个值存储在 foo[0] foo[1] foo[2] 元素中。再次感谢您!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2017-08-05
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多