在字典中存储 Lambda
Storing Lambdas in Dictionary
我正在尝试将 lambda 函数存储在 python 字典中。循环似乎用最后一个 lambda 覆盖了字典中存储的所有数据。例如:
example_dict = {}
for i in range(5):
example_dict[i] = lambda x: x + i
for key, func in example_dict.items():
print(key, func(10))
应该输出
0 10
1 11
2 12
3 13
4 14
但实际输出是:
0 14
1 14
2 14
3 14
4 14
这对我来说很有趣。有人知道为什么最后一个 lambda 函数会覆盖字典中的所有其他数据吗?
它并没有覆盖最后一个 lambda
,它们 all 指向 for
循环中 i
的最终值,因为如何关闭工作。您可以通过给 lambda
函数一个默认参数来避免它:
example_dict = {}
for i in range(5):
example_dict[i] = lambda x, i=i: x + i
for key, func in example_dict.items():
print(key, func(10))
有变化的输出:
0 10
1 11
2 12
3 13
4 14
我正在尝试将 lambda 函数存储在 python 字典中。循环似乎用最后一个 lambda 覆盖了字典中存储的所有数据。例如:
example_dict = {}
for i in range(5):
example_dict[i] = lambda x: x + i
for key, func in example_dict.items():
print(key, func(10))
应该输出
0 10
1 11
2 12
3 13
4 14
但实际输出是:
0 14
1 14
2 14
3 14
4 14
这对我来说很有趣。有人知道为什么最后一个 lambda 函数会覆盖字典中的所有其他数据吗?
它并没有覆盖最后一个 lambda
,它们 all 指向 for
循环中 i
的最终值,因为如何关闭工作。您可以通过给 lambda
函数一个默认参数来避免它:
example_dict = {}
for i in range(5):
example_dict[i] = lambda x, i=i: x + i
for key, func in example_dict.items():
print(key, func(10))
有变化的输出:
0 10
1 11
2 12
3 13
4 14