我有以下代码段:
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
这样的标量值,此模式似乎会中断。既不将变量定义为全局变量(如此处所示),也没有将其作为参数传递给内部函数都无法按预期工作。基本上,标量变量保持不变。我需要怎么做才能获得具有这种标量值的预期行为?
答案 0 :(得分:1)
您需要nonlocal
而不是global
。您的num_sum
不是全局变量(在globals()
中找不到)。 nonlocal
将指示python不要在全局名称空间中搜索它,而是在最近的名称空间中搜索它。顺序为LEGB: Local, Enclosed, Global, Built-in。