嵌入式函数中的全局变量

时间:2019-09-02 15:29:02

标签: python python-3.x global-variables

我有以下代码段:

def test ():
  num_sum = 0
  def inner_test ():
    global num_sum
    num_sum += 1
  inner_test()
return num_sum

当我运行test()时,我得到:

  

NameError:名称'num_sum'未定义

我期望内部函数会更改外部函数中定义的num_sum变量的值。基本上,我需要一个全局变量来递增一个内部函数,该函数可以递归调用。

我注意到,即使我没有将变量定义为全局变量(而是将其作为参数传递给内部函数),该模式也适用于集合(列表,字典)。

但是,对于像int这样的标量值,此模式似乎会中断。既不将变量定义为全局变量(如此处所示),也没有将其作为参数传递给内部函数都无法按预期工作。基本上,标量变量保持不变。我需要怎么做才能获得具有这种标量值的预期行为?

1 个答案:

答案 0 :(得分:1)

您需要nonlocal而不是global。您的num_sum不是全局变量(在globals()中找不到)。 nonlocal将指示python不要在全局名称空间中搜索它,而是在最近的名称空间中搜索它。顺序为LEGB: Local, Enclosed, Global, Built-in