考虑下面的代码:
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:为了修复代码,我对替代实现不感兴趣。
正如评论中所建议的,这个问题似乎几乎回答了这个问题,并且对彻底解释它有很大帮助。然而,有一个小的变化可以通过类似的方法来解决。结果代码如下:
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)
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |