我刚刚阅读了这个问题的答案:Accessing class variables from a list comprehension in the class definition
它有助于我理解为什么以下代码会导致NameError: name 'x' is not defined
:
class A:
x = 1
data = [0, 1, 2, 3]
new_data = [i + x for i in data]
print(new_data)
发生这种NameError
情况是因为x
未在列表理解的特殊范围内定义。但我无法理解为什么下面的代码可以正常工作而没有任何错误。
class A:
x = 1
data = [0, 1, 2, 3]
new_data = [i for i in data]
print(new_data)
我得到了输出[0, 1, 2, 3]
。但我期待这个错误:NameError: name 'data' is not defined
因为我期待就像在前面的示例中一样,名称x
没有在列表推导的范围内定义,同样,名称data
也不会在列表推导的范围内定义。
你能帮我理解为什么x
没有在列表理解的范围内定义而是定义data
吗?