Python 多个函数中的未绑定局部错误
我一直在创建一系列随机事件,其中每个函数对一组主要变量执行不同的操作,但我不断得到未绑定的局部错误。这是我的代码的简化版本Python 多个函数中的未绑定局部错误,python,Python,我一直在创建一系列随机事件,其中每个函数对一组主要变量执行不同的操作,但我不断得到未绑定的局部错误。这是我的代码的简化版本 variable = 1 def main(): global variable secondary() variable = secondary() def secondary() variable += 1 return variable 再一次,这是解释我的代码的一种非常简单的方法,但是变量+=1是表示次要
variable = 1
def main():
global variable
secondary()
variable = secondary()
def secondary()
variable += 1
return variable
再一次,这是解释我的代码的一种非常简单的方法,但是变量+=1是表示次要函数中错误的部分,变量没有定义。您必须执行
全局变量
,这将使变量可访问。另外,您调用secondary两次,这会使变量上升两次,但不确定您是否希望这样做。此外,secondary在括号后没有冒号,这会导致语法错误。最后,代码很可能没有正确缩进,因为次要变量没有缩进,尽管其他代码块都缩进了。我注意到了@TimothyChen提到的所有相同问题。我想解释一下您询问的错误,即:
UnboundLocalError: local variable 'v' referenced before assignment
这种情况发生在这里:
v = 1
def secondary()
v += 1
这里的问题是由于Python特有的行为造成的,而且有点奇怪(请原谅,我将变量的名称更改为v
,以避免混淆)
如果有一个名为v
的全局变量被声明,而您只从函数中名为v
的变量中读取,则Python声明您正在从名为v
的全局变量中读取
如果有一个名为v
的全局变量被声明,然后在函数中写入名为v
的变量,Python会说这是函数的另一个局部变量,除非您首先在该函数中说global v
,然后v
引用全局变量
因此,对于函数secondary()
,您是A)在函数中写入v
,B)在函数中的任何位置都不说global v
。所以Python说,在该函数中,v
是该函数的唯一局部变量。但是如果v
是函数的局部变量,并且您对该函数中变量的第一个引用是:
v += 1
那么在此点之前,v
没有被赋值。由于这行代码首先读取v
,然后将一个新值写回该行,因此您会看到错误,因为尝试读取尚未赋值的变量
似乎很清楚,要解决此问题,您需要做的是如下声明您的辅助功能:
def secondary()
global variable
variable += 1
return variable
添加global variable
告诉Python,您对variable
的引用是指具有该名称的全局变量,即使您正在对其进行写入
我建议以后不要给变量命名variable
。这只会导致混乱