嵌套推导中的NameError

Eri*_*ric 16 python list-comprehension

我在一个文件中有这个代码

class Sudoku(dict):
    COLUMNS = [
        {(x, y) for y in xrange(9)} for x in xrange(9)
    ]
Run Code Online (Sandbox Code Playgroud)

当我跑步时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]
Run Code Online (Sandbox Code Playgroud)

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


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


编辑:如果我使用列表理解而不是集合理解,这是有效的

Eri*_*ric 8

我在这里提交了一个错误.这是仍然破碎 按照python 2.7.5中的设计.

从错误报告:

在Python 2中,列表推导没有自己的范围,因此x在您的初始示例中,它们位于类范围内.但是,集合理解确实有其自己的范围.按照设计,在类范围内定义的变量对该类内部范围不可见.

在Python 3中,这是有效的,因为列表推导有自己的范围.