以下代码给出了错误UnboundLocalError: local variable 'Var1' referenced before assignment
:
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
Var1 =- 1
function()
我该怎么解决?谢谢你的帮助!
如果在函数中设置变量的值,python会将其理解为使用该名称创建局部变量。这个局部变量掩盖了全局变量。
在您的例子中,
Var1
被视为一个局部变量,在设置之前使用它,因此出现错误。要解决这个问题,可以通过在函数中放入
global Var1
来显式地说它是全局的。这是因为,即使存在
Var1
,您也在函数内部的名称Var1
上使用赋值语句(在底线处为Var1 -= 1
)。自然,这会在函数的作用域内创建一个名为Var1
的变量(实际上,-=
或+=
将只更新(重新分配)一个现有变量,但由于未知的原因(在此上下文中可能是一致性),Python将其视为一个赋值。Python解释器在模块加载时看到这一点,并决定(正确地)全局作用域的Var1
不应在本地作用域内使用,这会导致在本地分配变量之前尝试引用变量时出现问题。Python开发人员通常不喜欢在必要的情况下使用全局变量,因为这会导致代码混乱和有问题。但是,如果您想使用它们来完成代码的含义,只需添加:
在你的函数顶部。这将告诉Python您不打算在函数的本地作用域内定义
Var1
或Var2
变量。Python解释器在模块加载时看到这一点,并决定(正确地说)在全局范围内查找对上述变量的任何引用。一些资源
可以通过传递参数而不是依赖全局参数来解决此问题
相关问题 更多 >
编程相关推荐