当前位置: 首页 > 面试题库 >

嵌套理解中的NameError

公良高刚
2023-03-14
问题内容

我在文件中有此代码

class Sudoku(dict):
    COLUMNS = [
        {(x, y) for y in xrange(9)} for x in xrange(9)
    ]

当我运行时python broken.py,我得到了回溯:

Traceback (most recent call last):
  File "U:\broken.py", line 1, in <module>
    class Sudoku(dict):
  File "U:\broken.py", line 3, in Sudoku
    {(x, y) for y in xrange(9)} for x in xrange(9)
  File "U:\broken.py", line 3, in <setcomp>
    {(x, y) for y in xrange(9)} for x in xrange(9)
NameError: global name 'x' is not defined
[Finished in 0.1s with exit code 1]

我真的没有在这里看到问题。x理解中没有定义吗?

奇怪的是,当直接粘贴到python解释器中时,这似乎如何执行而没有错误…

编辑 :如果我使用列表理解而不是集合理解,则此方法有效


问题答案:

我在这里提出了一个错误。这是 还是坏了 通过python 2.7.5设计。

从错误报告:

在Python 2中,列表推导式没有自己的作用域,因此x在您的第一个示例中,列表推导式处于类作用域内。但是,集合理解 确实
有其自身的范围。通过设计,在类范围内定义的变量对该类内部的内部范围不可见。

在Python 3中,这是可行的,因为列表理解具有其自身的范围。



 类似资料:
  • 问题内容: 我试图在一个内部列表中使用外部列表理解的值: 但是不幸的是,这会引发NameError,因为名称是未知的(尽管外部列表理解指定了该名称)。 这是Python的局限性(尝试过2.7.3和3.2.3)还是有充分的理由解释为什么它不起作用? 是否有计划摆脱限制? 是否有解决方法(可能我没有弄清楚一些不同的语法)来实现我想要的? 问题答案: 您在谈论列表 推导 ,而不是生成器表达式。 您需要交

  • 问题内容: 我想了解嵌套列表的理解。下面,我列出了一个列表理解表达式及其for循环等效项。 我不知道我的理解是否正确。 例如, 相当于 如果可以概括一下,我猜 表格可以翻译为以下内容。(我希望我是对的) 对于更简单的情况, 等于 而, 等于 我问了一个类似的问题,即用于复杂列表理解 的循环表达式的等效项。那里给出的答案是在理解了表单内部的内容之后重构了表单。 我想知道它是如何系统地工作的,因此我可

  • 问题内容: 我在理解Python3中的嵌套字典理解时遇到了麻烦。从下面的示例中得到的结果输出的是正确的结构,没有错误,但仅包含一个内部键:值对。我还没有找到像这样的嵌套字典理解的例子。谷歌搜索“嵌套词典理解python”显示了遗留示例,非嵌套理解或使用其他方法解决的答案。我可能使用了错误的语法。 例: 此示例应返回原始字典,但内部值由修改。 outside_dict词典的结构以及结果: 问题答案:

  • 问题内容: 我必须与API进行交互,并且响应格式(根据我的阅读)似乎结构不良。我发现一个Google 网上论坛在这里回答了一个类似的问题,但是我在实现Response类来处理Gson.fromJson时遇到了麻烦。有没有我想念的例子? 问题答案: JSON对象可以由或Javabean类表示。这是一个使用Javabean的示例。 如下使用它:

  • 问题内容: 解释我的问题的最好方法是举一个例子: example.py: 当我在python 2下运行它时,它工作正常,但是在python 3下,我得到了for类(但不是class ): 为什么只有class会引发a ,为什么只在Python 3下? 问题答案: 类作用域在Python 3中有点奇怪,但这是有充分理由的。 在Python 2中,迭代变量(以及您的示例中)从列表理解中泄漏出来,并将包

  • 问题内容: 我正在尝试解析这种结构:(它使我发疯,并且我尝试了我能想到的一切。但是我不是很有经验) “ topDrop”就像文件名吗?player是一个JSONArray,包含5个播放器JSONObject。但是在JSON术语中,最重要的是什么。我在JSON验证程序上签出有效的凭证,我需要这样的凭证: topDrop作为JSONObject Player,作为JSONArray,并循环遍历数组中的