这是python中的一个bug。理解被宣传为等同于for循环,但这在类中是不正确的。至少在Python3.6.6之前,在类中使用的理解中,只有一个来自理解外部的变量可以在理解内部访问,并且它必须用作最外层的迭代器。在函数中,此范围限制不适用。
为了说明为什么这是一个bug,让我们回到原来的示例。失败了:
class Foo:
x = 5
y = [x for i in range(1)]
但这是有效的:
def Foo():
x = 5
y = [x for i in range(1)]
限制在
this section
在参考指南中。