【问题标题】:Python lambda functions not working with loopsPython lambda函数不适用于循环
【发布时间】:2021-12-12 04:39:31
【问题描述】:
li = []
for i in range(5):
    li.append(lambda: i)

for item in li:
    print(item())

此代码导致函数始终返回 4。为什么会发生这种情况,无论如何要防止这种情况发生,同时保持代码的相同想法。

【问题讨论】:

  • 这能回答你的问题吗? Python, loops and closures
  • @NickParsons 尽管您所指的问题已部分回答了该问题,但 is there anyway to prevent this 并未完全回答。
  • @Tarik 我认为最后一段说 “如果您希望每个函数的打印值 i 固定为定义函数时的值,最简单的方法是使用默认参数” 举例说明如何防止?
  • 很公平。我在那里添加了一个替代实现。将投票结束这个问题。
  • i 设置的最后一个值是 4。因此,当调用该函数时,它不会返回最初输入的数字,而只是 4。

标签: python loops lambda


【解决方案1】:

如果您希望li 中的每个item 都是返回整数的函数,则需要在内部定义另一个 lambda:

li = []
for i in range(5):
    li.append((lambda y: lambda : y)(i))

for item in li:
    print(item())

输出:

0
1
2
3
4

但如果你想让li 保留整数,那么你可以这样做:

for i in range(5):
    li.append((lambda y: y)(i))

for item in li:
    print(item)
# same outcome as above

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多