首页 > 解决方案 > Python - 在分配变量之前引用的局部变量应该覆盖范围之外的变量

问题描述

此代码不起作用(UnboundLocalError: local variable 'x' referenced before assignment):

x = 5
def thing():
    x = x + 1
thing()

这个确实(仅更改xi):

x = 5
def thing():
    i = x + 1
thing()

我预计对于第一个,它将创建一个名为x6 的新变量(保持外部变量不变),这就是i第二个示例中的内容。这里发生了什么?似乎当一个变量第一次在作用域中创建时,它会检查它是否存在于任何外部作用域中,如果已经找到则引发错误,如果已经找到则引发错误。

现在,我的问题是,这样做的目的是什么?

标签: pythonscopeshadowing

解决方案


Python 不允许您使用相同的符号来引用两个不同的变量。要么xglobal,在这种情况下,您必须global x在函数的开头声明(然后两次出现都x引用函数内部的全局);或者不是,在这种情况下,x您所指的 inx + 1尚未定义。

以一种奇怪的方式,您的推理是有道理的,至少在这个小玩具示例中,但应该很容易看出您假设的语义在任何具有许多变量的较大代码块中对于人类来说将是灾难性的难以理解。


推荐阅读