以下代码
class Foo:
bar=[sum( i^j for i in range(9) )for j in range(9)]
加注
NameError: global name 'j' is not defined
在我的Python 2.7.14 IDLE上,以及在线翻译。
如果我理解正确,sum
接受iterable作为输入。 出了什么问题?
PS。
sum([ ... ])
代替,则不会有错误。答案 0 :(得分:2)
看来这是一个带有Python 2的known issue:
在Python 2中,列表推导没有自己的范围,所以x 在您的初始示例中,您处于类范围。但是,这套 理解确实有自己的范围。按设计,定义一个变量 在类范围内的内部范围不可见。
在Python 3中,这是有效的,因为列表推导有自己的 范围。
给出的例子是:
class Sudoku(dict):
COLUMNS = [
{(x, y) for y in xrange(9)} for x in xrange(9)}
]