【问题标题】:Why am i getting an UnboundLocalError in this list comprehension problem? [duplicate]为什么我在这个列表理解问题中得到 UnboundLocalError? [复制]
【发布时间】:2021-04-06 10:39:40
【问题描述】:
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 用于范围迭代的边界变量和迭代变量似乎是不明智的。同样y。列表推导具有特殊的内部作用域,您尝试引用 xy 并分配给具有不同含义的变量 xy

标签: python iterator list-comprehension


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多