Python 分配给函数Arg时出现未绑定本地错误

Python 分配给函数Arg时出现未绑定本地错误,python,function,python-3.x,scope,python-2.x,Python,Function,Python 3.x,Scope,Python 2.x,给我:- def make_accumulator(init): def accumulate(part): init = init + part return init return accumulate A = make_accumulator(1) print A(2) 回溯(最近一次呼叫最后一次): 文件“make acculator.py”,第8行,在 打印A(2) 文件“make accumulator.py”,第3行,累加 初

给我:-

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

A = make_accumulator(1)
print A(2)
回溯(最近一次呼叫最后一次):
文件“make acculator.py”,第8行,在
打印A(2)
文件“make accumulator.py”,第3行,累加
初始=初始+部分
UnboundLocalError:赋值前引用的局部变量“init”

为什么init在内部不可见

这是因为在分析内部函数的过程中,当Python看到赋值
init=init+part
时,它认为
init
是一个局部变量,并且只有在实际调用函数时才会在局部范围内查找它

要修复它,请将
init
作为默认值为
init
accumulate
的参数添加:

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


阅读:

这是因为在分析内部函数的过程中,当Python看到赋值
init=init+part
时,它认为
init
是一个局部变量,当函数实际被调用时,它只会在局部范围内查找它

要修复它,请将
init
作为默认值为
init
accumulate
的参数添加:

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

阅读:

>>def make_蓄能器(初始化):
...     def累积(部分):
...         返回初始化+部分
...     回报累积
... 
>>>闭合蓄能器(1)
>>>A(2)
3.
由于在acculate中声明了
init
,Python将其解释为本地,因此在赋值之前引用它。(注意,我删除了
init=
部分)

我肯定不是这方面的专家,但从这些帖子中得到了提示:和

我想有人可以更好地解释它…

>>def make_累加器(init):
...     def累积(部分):
...         返回初始化+部分
...     回报累积
... 
>>>闭合蓄能器(1)
>>>A(2)
3.
由于在acculate中声明了
init
,Python将其解释为本地,因此在赋值之前引用它。(注意,我删除了
init=
部分)

我肯定不是这方面的专家,但从这些帖子中得到了提示:和


我想有人可以更好地解释它…

你在哪里初始化了init。。。当解释器想要执行init=init+part时,它应该知道init在..之前已初始化..使用构造函数设置init值..`def make_acculator(self,init):def_uinit_uu(self,init):self.init=init`@lokesh1729他们正在将其值传递给
make_acculator
,它是一个闭包变量。如果他们只返回init+part就可以了。你在哪里初始化了init。。。当解释器想要执行init=init+part时,它应该知道init在..之前已初始化..使用构造函数设置init值..`def make_acculator(self,init):def_uinit_uu(self,init):self.init=init`@lokesh1729他们正在将其值传递给
make_acculator
,它是一个闭包变量。如果他们只执行
返回init+part
操作,则可以正常工作。
>>> def make_accumulator(init):
...     def accumulate(part): 
...         return init + part
...     return accumulate
... 
>>> make_accumulator(1)
<function accumulate at 0x7fe3ec398938>
>>> A(2)
3