【问题标题】:Creating lambda functions in python that can return objects [duplicate]在python中创建可以返回对象的lambda函数[重复]
【发布时间】: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


【解决方案1】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-04-02
    相关资源
    最近更新 更多