【发布时间】:2019-07-18 20:09:34
【问题描述】:
我想使用 lambdas 作为返回对象的函数。看一下 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
【问题讨论】:
-
你可以用
partial()代替lambda -
每个 lambda 表达式定义了一个返回对象的函数。
-
您需要执行
lambda x, i=item: print(i)将本地item放入lambda 的闭包中。您可以看到所有这些都是最后一个是有意义的,因为这是变量item分配给的最后一个值
标签: python python-3.x