从函数内部的函数更改局部变量的值

时间:2020-05-08 12:27:49

标签: python python-3.x

我有这样的东西:

def a():
  #do something
  foo = 0
  def b():
    foo += 2
    # do something
  b()
  #do something

a()

但它说

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    a()
  File "<pyshell#5>", line 7, in a
    b()
  File "<pyshell#5>", line 5, in b
    foo += 2
UnboundLocalError: local variable 'foo' referenced before assignment

如何在不全局的情况下访问foo

1 个答案:

答案 0 :(得分:3)

foo中对b的赋值使其成为局部变量,与a中同名的变量无关。使用nonlocal语句进行更改。

def a():
    #do something
    foo = 0
    def b():
        nonlocal foo
        foo += 2
        # do something
    b()
  #do something

现在foo中的bfoo中的a相同。 nonlocal类似于global,但使用包含名称foo的最接近的包围范围,而不是直接跳转到全局范围。