【问题标题】:Storing Lambdas in Dictionary在字典中存储 Lambda
【发布时间】:2021-02-05 21:43:59
【问题描述】:

我正在尝试将 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 函数会覆盖字典中的所有其他数据吗?

【问题讨论】:

  • 刚刚发现这一点,并感谢答案,但这种行为感觉像是 python 中的一个错误。

标签: python lambda closures


【解决方案1】:

它并没有覆盖最后一个 lambda,它们全部指向 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 i:(lambda x:x + i))(i) 如果你想强制使用单个参数 lambda。
  • @Calculuswhiz:当然……但是为什么要把事情复杂化呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多