gpt4 book ai didi

python - 如何创建 lambda 列表(在列表理解/for 循环中)?

转载 作者:IT老高 更新时间:2023-10-28 21:54:56 25 4
gpt4 key购买 nike

我想从 Python 中的常量列表创建 lambda 对象列表;例如:

listOfNumbers = [1,2,3,4,5]
square = lambda x: x * x
listOfLambdas = [lambda: square(i) for i in listOfNumbers]

这将创建一个 lambda 对象列表,但是,当我运行它们时:

for f in listOfLambdas:
print f(),

我希望它会打印出来

1 4 9 16 25

相反,它会打印:

25 25 25 25 25

似乎所有 lambdas 都被赋予了错误的参数。我做错了什么,有没有办法解决它?我认为我在 Python 2.4 中。

编辑:更多尝试的东西等等想出了这个:

listOfLambdas = []
for num in listOfNumbers:
action = lambda: square(num)
listOfLambdas.append(action)
print action()

打印预期的从 1 到 25 的方格,然后使用前面的打印语句:

for f in listOfLambdas:
print f(),

仍然给我所有 25s。现有的 lambda 对象在这两个打印调用之间有何变化?

相关问题:Why results of map() and list comprehension are different?

最佳答案

你有:

listOfLambdas = [lambda: i*i for i in range(6)]

for f in listOfLambdas:
print f()

输出:

25
25
25
25
25
25

你需要 curry !除了好吃之外,使用这个默认值“hack”。

listOfLambdas = [lambda i=i: i*i for i in range(6)]

for f in listOfLambdas:
print f()

输出:

0
1
4
9
16
25

注意 i=i。这就是魔法发生的地方。

关于python - 如何创建 lambda 列表(在列表理解/for 循环中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/452610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com