我有以下关于列表理解的代码。

x = 2
y = 3

[x*y for x in range(x) for y in range(y)]

这给了我以下错误
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    [x*y for x in range(x) for y in range(y)]
  File "<pyshell#35>", line 1, in <listcomp>
    [x*y for x in range(x) for y in range(y)]
UnboundLocalError: local variable 'y' referenced before assignment

但是,下面的代码有效。
[x*y for x in range(x)]
[0, 5]

列表理解中的第二个 for 循环是否有任何范围规则?

我正在使用 Python 3.6。

最佳答案

好问题,但是这段代码在 Python2.x 中运行良好,它会在 UnboundLocalError 中抛出 Python3.x



这是因为当您对 作用域 中的变量进行赋值时,该变量将成为该作用域的局部 并隐藏外部作用域 中任何类似命名的变量。由于它为 x 分配了一个新值,编译器将其识别为 局部变量 。因此,较早的变量尝试打印未初始化的局部变量并导致错误。

Why am I getting an UnboundLocalError when the variable has a value? 中查看更多详细信息。

关于python - UnboundLocalError : local variable 'y' referenced before assignment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42579202/

10-12 21:18