非绑定本地错误时分配到功能精氨酸

问题描述:

def make_accumulator(init): 
    def accumulate(part): 
     init = init + part 
     return init 
    return accumulate 

A = make_accumulator(1) 
print A(2) 

给我: -非绑定本地错误时分配到功能精氨酸

Traceback (most recent call last): 
    File "make-accumulator.py", line 8, in <module> 
    print A(2) 
    File "make-accumulator.py", line 3, in accumulate 
    init = init + part 
UnboundLocalError: local variable 'init' referenced before assignment 

为什么是init不可见的内部积聚?

+0

你在哪里初始化的init ...当翻译想做的init =初始化+的一部分,它应该知道之前的init初始化.. –

+0

使用构造函数来设置初始值...'def make_accumulator(self,init):def __init __(self,init):self.init = init' –

+1

@ lokesh1729它们将值传递给'make_accumulator',它是一个闭包变量。如果他们只执行'返回init + part',它就可以正常工作。 –

这是因为在Python看到赋值时分析内部函数init = init + part它认为init是一个局部变量,它只会在实际调用该函数时在本地范围内查找它。

要修复它作为一个参数添加initaccumulateinit默认值:

def make_accumulator(init): 
    def accumulate(part, init=init): 
     init = init + part 
     return init 
    return accumulate 

阅读:Why am I getting an UnboundLocalError when the variable has a value?

>>> def make_accumulator(init): 
...  def accumulate(part): 
...   return init + part 
...  return accumulate 
... 
>>> make_accumulator(1) 
<function accumulate at 0x7fe3ec398938> 
>>> A(2) 
3 

既然你声明init内部积聚,巨蟒将其解释作为本地,因此在分配前引用。 (请注意,我删除了init =部分)。

我绝对不是这方面的专家,但从这些帖子得到提示:HereHere

我想有人能更好地解释它...