这个小代码片段中的`UnboundLocalError`让我感到困惑

时间:2018-07-12 00:36:49

标签: python scope global local

def h(y):
    x = x + 1

x  = 5
h(x)
print(x)

所以这是从MIT 6.00.1课程开始的。此代码段引发UnboundedLocalError:赋值之前引用的局部变量'x'。

我什至尝试这样做:

x = 5
def h(y):
    x = x + 1

h(x)
print(x)

但这也给出了UnboundLocalError。我的思考过程是在函数创建并声明到全局堆栈之前声明x = 5(如果措辞不正确,抱歉),将确保我们调用h(x)时,全局作用域变量x将有一个值传递给该函数。

我也很好奇这个有点类似的代码片段不会产生UnboundLocalError

x = 12
def g(x):
    x = x + 1
    return x

g(x)

我正在通过Python Tutor运行这些代码段,我(相当确定)我通常了解代码执行时事物发生的顺序。

对不起,在此先谢谢您-我想了解这里的实际情况,而不是掩盖它。我意识到通常本地范围内的变量不太容易混淆,也不太可能引起奇怪的错误。

0 个答案:

没有答案