非绑定本地错误时分配到功能精氨酸
问题描述:
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不可见的内部积聚?
答
这是因为在Python看到赋值时分析内部函数init = init + part
它认为init
是一个局部变量,它只会在实际调用该函数时在本地范围内查找它。
要修复它作为一个参数添加init
到accumulate
与init
默认值:
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?
你在哪里初始化的init ...当翻译想做的init =初始化+的一部分,它应该知道之前的init初始化.. –
使用构造函数来设置初始值...'def make_accumulator(self,init):def __init __(self,init):self.init = init' –
@ lokesh1729它们将值传递给'make_accumulator',它是一个闭包变量。如果他们只执行'返回init + part',它就可以正常工作。 –