首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套的lambdas的Python列表仅执行lambda列表的最后一个元素

嵌套的lambdas的Python列表仅执行lambda列表的最后一个元素
EN

Stack Overflow用户
提问于 2020-10-13 02:32:22
回答 1查看 46关注 0票数 2

下面的代码片段演示了嵌套的lambdas列表仅计算为原始lambdas列表的最后一个元素。

代码语言:javascript
运行
复制
eqs_test = [
    (lambda x: f"0"),
    (lambda x: f"1"),
    (lambda x: f"2"),
    (lambda x: f"3"),
]

# unexpected output
print([a(1) for a in [
    lambda x: f"{e1(0)}-{e2(0)}" for e1, e2 in zip(eqs_test[1:], eqs_test[:-1])
]])

# expected output (no outer lambda used here for testing)
print([a for a in [
    f"{e1(0)}-{e2(0)}" for e1, e2 in zip(eqs_test[1:], eqs_test[:-1])
]])

输出为:

代码语言:javascript
运行
复制
['3-2', '3-2', '3-2']
['1-0', '2-1', '3-2']

我希望在这两种情况下都会有第二个输出,但不知何故,lambda没有正确存储(3-2只是最后生成的lambda)。这里发生了什么?我如何存储外部lambda,以便它运行正确的嵌套lambda?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 02:35:36

要使第一个示例工作,请将变量存储为lambda参数。否则,lambda将始终打印e1e2的最后一个值:

代码语言:javascript
运行
复制
eqs_test = [
    (lambda x: f"0"),
    (lambda x: f"1"),
    (lambda x: f"2"),
    (lambda x: f"3"),
]

# unexpected output
print([a(1) for a in [
    lambda x, e1=e1, e2=e2: f"{e1(0)}-{e2(0)}" for e1, e2 in zip(eqs_test[1:], eqs_test[:-1])
]])

打印:

代码语言:javascript
运行
复制
['1-0', '2-1', '3-2']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64323439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档