令人惊讶的类定义范围行为

时间:2017-07-31 16:36:27

标签: python python-3.x

说我有一些功能:

def f(x):
    return x

...以及使用它的一些类定义,如下所示:

class Cgood():
    x = None
    y = f('foo')

这很好用:

>>> Cgood().y
'foo'

但是,如果我尝试做这样的事情:

class Cbad():
    x = None
    y = [f(x) for _ in 'abcdefg']

我们收到错误:

NameError: name 'x' is not defined

为什么x在列表推导范围内不可用?是否有其他方式可以访问x?我看到的唯一方法是放弃列表comp并使用正常的for循环。

编辑:我在Python 3.6.2上

0 个答案:

没有答案