在python中创建可以返回对象的lambda函数

时间:2019-07-18 20:09:34

标签: python python-3.x

我想使用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

1 个答案:

答案 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