列表理解与 for 循环,在类定义中

Ren*_*mas 6 python python-3.x

考虑下面的代码:

class Test:
    l = [1, 2, 3]
    foo = lambda x: x

    for x in l:
        print(foo(x))

   [print(foo(x)) for x in l]


if __name__ == '__main__':
    test = Test()
Run Code Online (Sandbox Code Playgroud)

输出如下:

1
2
3
... in <listcomp>
    [print(foo(x)) for x in l]
NameError: name 'foo' is not defined
Run Code Online (Sandbox Code Playgroud)

我不明白为什么foo列表迭代中的函数不是可见的。可能与范围有关,但我正在寻找正确的解释,并在可能的情况下提供支持它的文档。

ps:为了修复代码,我对替代实现不感兴趣。

Ren*_*mas 2

正如评论中所建议的,这个问题似乎几乎回答了这个问题,并且对彻底解释它有很大帮助。然而,有一个小的变化可以通过类似的方法来解决。结果代码如下:

class Test:
    l = [1, 2, 3]
    foo = lambda x: x

    (lambda foo=foo, l=l: [print(foo(x)) for x in l])()
Run Code Online (Sandbox Code Playgroud)