我想使用lambda作为返回对象的函数。看一下lambda x: print(item)
,在编写时,预期的结果是holder[str(item)]
将存储一个返回当前项目的函数。但是我的代码表明它总是返回最后一个项目。
为什么会这样?并可以通过传递实际返回项目的函数的方法吗?
items = [1,2,3]
holder = {}
for item in items:
holder[str(item)] = lambda x: print(item)
holder['1'](None)
holder['2'](None)
holder['3'](None)
输出:
3
3
3
预期的行为是:
1
2
3
答案 0 :(得分:3)
您可以使用partial()
而不是lambda:
from functools import partial
items = [1,2,3]
holder = {}
for item in items:
holder[str(item)] = partial(print, item)
holder['1'](None)
holder['2'](None)
holder['3'](None)
提供以下输出:
1 None
2 None
3 None