我有以下片段:
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这样的标量值,这种模式似乎已经崩溃了。无论是将变量定义为全局变量(如这里所示),还是将其作为参数传递给内部函数,都不会按预期工作。基本上,标量变量保持不变。我需要做什么才能得到这样的标量值所期望的行为?
发布于 2019-09-02 15:34:15
您需要nonlocal而不是global。您的num_sum不是全局变量(在globals()中找不到)。nonlocal将指示python不要在全局命名空间中搜索它,而是在最近的名称空间中搜索它。订单是LEGB:本地的,封闭的,全球的,内置的。
https://stackoverflow.com/questions/57759518
复制相似问题