【问题标题】:Python - local variable referenced before assignment for variable that should shadow one outside of scopePython - 在分配变量之前引用的局部变量应该覆盖范围之外的变量
【发布时间】:2021-03-09 14:27:28
【问题描述】:

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

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

这个可以(只将x改为i):

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

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

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

【问题讨论】:

    标签: python scope shadowing


    【解决方案1】:

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

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

    【讨论】:

    • 还有一些有趣的含义:如果x = [] 并在外部定义,x.append(0) 有效,而x += [0] 不允许在内部。
    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多