生成器理解忽略类范围

时间:2019-01-27 17:36:45

标签: python python-3.x python-2.x

我似乎不确定Python如何处理类中的变量范围。这个简单的类演示了我的问题:

x = 5  # Outside class scope
class SomeClass:
    x = 17  # Inside class scope

    # Generator expression should use x = 17 from inside class scope
    y = (x for i in range(10))

输出:

>>> list(SomeClass.y)
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

显然,生成器表达式从类内部忽略了x = 17。所以,我想我可以将其更改为列表理解:

x = 5  # Outside class scope
class SomeClass:
    x = 17  # Inside class scope

    # List expression should use x = 17 from inside class scope
    y = [x for i in range(10)]

输出(Python 2.x):

>>> SomeClass.y
[17, 17, 17, 17, 17, 17, 17, 17, 17, 17]

在Python 2.x中,列表推导似乎使用了该类的范围。但是,在Python 3.x中不是这样:

输出(Python 3.x):

>>> SomeClass.y
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

如果要使用Python 3.x,如何使用类的变量范围?生成器理解和列表理解似乎都无法使用类范围。

0 个答案:

没有答案