为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2023-10-31 14:32:44
以下代码片段演示了嵌套 lambda 列表仅计算原始 lambda 列表的最后一个元素。eqs_test = [    (lambda x: f"0"),    (lambda x: f"1"),    (lambda x: f"2"),    (lambda x: f"3"),]# unexpected outputprint([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])]])输出是:['3-2', '3-2', '3-2']['1-0', '2-1', '3-2']我希望在这两种情况下都有第二个输出,但不知何故,lambda 没有正确存储(3-2只是最后生成的 lambda)。这里发生了什么以及如何以运行正确的嵌套 lambda 的方式存储外部 lambda?
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

为了使第一个示例正常工作,请将变量存储为 lambda 参数。否则,lambda 将始终打印e1和的最后一个值e2:


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])

]])

印刷:


['1-0', '2-1', '3-2']


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信