在函数中使用变量(Python)



给定以下代码:

U = [1,2,3]
def test():
# global U
u = U * 2
print(u)
# U = u
test()
print(U)

在此表单中,打印(u)显示[1,2,3,1,2,3]。这意味着在函数中成功读取了"U"。

但是,如果我取消对U=U行的注释,那么我会收到以下错误消息:

u = U * 2 UnboundLocalError: local variable 'U' referenced before assignment

我只能通过取消对"全局U"行的注释来修复它。不过我不明白。以前u=u*2工作得很好。如果我取消注释下面的一行,为什么在u=u*2处会出现错误?

编辑:我不认为它是重复的。我的问题是,为什么我在未修改的行中看到错误。在我的真实代码中,"u=u*2"one_answers"u=u"之间大约有100行,我花了几个小时才意识到错误实际上是由"u=u"行引起的。

U = ...创建一个局部变量U。无论它出现在函数的哪里,无论是在开始还是结束,Python在解析函数体时都会解决所有这些问题。在这种情况下,也有全局变量U并不重要,它被函数体中出现的局部变量U遮蔽。因此,问题归结为在定义U之前尝试执行U * 2。为了获得相同的效果,您可以调用除U之外的任何其他变量。

澄清:

u = U * 2
U = u

这并不意味着读取全局U,然后创建本地UU = ...出现在函数体内的任何位置,Python将名称U保留为局部变量名。同一名称不能含糊地引用全局变量,也不能在下一行中含糊地引用局部变量。

当您还添加global U时,您为Python澄清了本地函数范围中的名称U总是指全局变量U

如果省略U = ...,那么函数内的任何位置都不会创建该名称的局部变量,Python在获取其值时会从周围的范围中查找U的值。

相关内容

  • 没有找到相关文章

最新更新