为什么我在这个列表理解问题中收到 UnboundLocalError?

问题描述

x = int(input())
y = int(input())
print([[x,y] for x in range(x) for y in range(y)])

以上,每当我使用迭代器变量作为 x 和 y,'它显示一个错误'

但是当我将其更改为 a 和 b 时,'它工作正常'见下文

x = int(input())
y = int(input())
print([[a,b] for a in range(x) for b in range(y)]) #this is working fine

谁能告诉我 UnboundLocalError 背后的原因?

解决方法

问题在于您在列表理解中“重新声明”了 x。这是发生在微观事件中的情况:

  1. x = int(input())x 被声明并分配有用户输入。
  2. y = int(input())y 被声明并分配有用户输入。
  3. for xx 在更局部的范围内(在列表推导式中)声明,但未分配。
  4. in range(x)。迭代被定义为发生在 range(x) 的结果内。由于 x 当前未分配给任何值,因此您的 UnboundLocalError 异常发生。

正如您已经看到的,解决方案只是为迭代使用不同的变量。