了解在函数内重新分配变量时的 UnboundLocalError
当变量在函数外部定义时,它被视为全局变量,并且在函数内可访问。但是,如果在函数内重新定义变量,则该变量将成为局部变量并优先于全局变量。当尝试使用相同名称访问全局变量时,这可能会导致错误“UnboundLocalError”。
在提供的示例中:
a, b, c = (1, 2, 3) def test(): print(a) print(b) print(c) c += 1
执行此代码时,变量 a 、b 和 c 是全局定义的。在测试函数中, print(a)、print(b) 和 print(c) 行成功打印了全局变量的值。
但是,当 c = 1 行取消注释时,它会尝试在测试函数中重新分配 c 的值。这将创建一个新的局部变量 c 并为其分配值 4。因此,当执行 print(c) 行时,它引用的是局部变量 c 而不是全局变量 c。由于局部变量 c 在被引用之前尚未赋值,因此会引发“UnboundLocalError”错误。
要避免此错误,可以在函数内的变量名前使用 global 关键字来显式地表示您要访问全局变量。例如,下面的代码将正确工作:
a, b, c = (1, 2, 3) def test(): global c print(a) print(b) print(c) c += 1
在这种情况下,当执行测试函数时,全局 c 语句确保函数中的变量 c 引用全局变量 c 而不是局部变量。因此, print(c) 行将打印全局变量 c 的正确值。
以上是为什么在 Python 函数中重新分配变量会导致 UnboundLocalError?的详细内容。更多信息请关注PHP中文网其他相关文章!